[英]Core Data object into an NSDictionary with possible nil objects
我有一個核心數據對象,有一堆可選值。 我正在推送一個表視圖控制器並向它傳遞一個對象的引用,以便我可以在表視圖中顯示它的內容。 因為我希望以特定方式顯示表視圖,所以我將核心數據對象中的值存儲到字典數組中,然后使用該數組填充表視圖。 這很好用,我編輯和保存工作正常。 (我沒有使用獲取的結果控制器,因為我沒有任何可以排序的東西)
我當前代碼的問題是,如果對象中的一個項目丟失,那么我最終會嘗試將nil放入字典中,這將無效。
我正在尋找一種干凈的方法來處理這個問題,我可以做到以下幾點,但我不禁感到有更好的方法。
* passedEntry是在推送時傳遞給視圖控制器的核心數據對象,假設它包含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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.