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

标签 iphone objective-c core-data

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

相关文章:

iphone - 如何播放/打开嵌入 PDF 的视频文件?

iphone - int vs NSNumber vs NSInteger

swift - 使用 NSPredicate 对 TableView 中的核心数据进行排序(Swift)

ios - 向下传递数据

ios - 如何将纬度和经度存储在核心数据的表中

iphone - 将 UIView 传递给下一个被推送到导航堆栈上的 UIViewController

ios - 上传 ionic app itunes connect

ios - UIWebView 在加载 PDF 文件时没有释放内存

iphone - 如何使用ntimer显示秒?

ios - UITableView - 如何滚动标题部分以及表格 View 单元格?