我有一个核心数据对象,它有一堆可选值。我正在推送一个 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/