gpt4 book ai didi

iphone - 核心数据对象到一个 NSDictionary 可能有 nil 对象

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:42 24 4
gpt4 key购买 nike

我有一个核心数据对象,它有一堆可选值。我正在推送一个 TableView Controller 并将对象的引用传递给它,这样我就可以在 TableView 中显示它的内容。因为我希望 TableView 以特定方式显示,所以我将核心数据对象的值存储到字典数组中,然后使用该数组填充 TableView 。这很好用,我的编辑和保存工作正常。(我没有使用 fetched results controller,因为我没有任何东西可以排序)

我当前代码的问题是,如果对象中的一项丢失,那么我最终会尝试将 nil 放入字典,但这是行不通的。

我正在寻找一种干净的方法来处理这个问题,我可以执行以下操作,但我情不自禁地觉得有更好的方法。

*passedEntry 是在推送 View Controller 时传递给 View Controller 的核心数据对象,假设它包含 firstName、lastName 和 age,这些都是可选的。

if ([passedEntry firstName] != nil) {
[dictionary setObject:[passedEntry firstName] forKey:@"firstName"]
}
else {
[dictionary setObject:@"" forKey:@"firstName"]
}

等等。这行得通,但感觉很笨拙,尤其是当我最终向核心数据对象添加更多项目时。

最佳答案

您可以做的是使用 objc_* 运行时函数遍历对象的所有属性,如下所示:

unsigned int property_count;
objc_property_t * prop_list = class_copyPropertyList([CoreDataObject class], &property_count);

for(int i = 0; i < property_count; i++) {
objc_property_t prop = prop_list[i];
NSString *property_name = [NSString stringWithCString:property_getName(prop) encoding:NSUTF8StringEncoding];
id obj = [passedEntry valueForKey:property_name];
[dictionary setObject:((obj != nil) ? obj : [NSNull null]) forKey:property_name];
}

free(prop_list);

关于iphone - 核心数据对象到一个 NSDictionary 可能有 nil 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com