簡體   English   中英

將Core Data對象轉換為具有可能的nil對象的NSDictionary

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM