Chu*_*uck 4 iphone core-data objective-c
我有一个核心数据对象,有一堆可选值.我正在推送一个表视图控制器并向它传递一个对象的引用,以便我可以在表视图中显示它的内容.因为我希望以特定方式显示表视图,所以我将核心数据对象中的值存储到字典数组中,然后使用该数组填充表视图.这很好用,我编辑和保存工作正常.(我没有使用获取的结果控制器,因为我没有任何可以排序的东西)
我当前代码的问题是,如果对象中的一个项目丢失,那么我最终会尝试将nil放入字典中,这将无效.
我正在寻找一种干净的方法来处理这个问题,我可以做到以下几点,但我不禁感到有更好的方法.
*passedEntry是在推送时传递给视图控制器的核心数据对象,假设它包含firstName,lastName和age,都是可选的.
if ([passedEntry firstName] != nil) {
[dictionary setObject:[passedEntry firstName] forKey:@"firstName"]
}
else {
[dictionary setObject:@"" forKey:@"firstName"]
}
Run Code Online (Sandbox Code Playgroud)
等等.这有效,但感觉很糟糕,特别是如果我最终在核心数据对象中添加更多项目.
你可以做的是使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |