2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
核心數(shù)據(jù)中沒有“本機(jī)”數(shù)組或字典類型。您可以將NSArray
或NSDictionary
作為可轉(zhuǎn)換屬性存儲(chǔ)。這將用于將NSCoding
數(shù)組或字典序列化為NSData
屬性(并在訪問時(shí)適當(dāng)?shù)胤葱蛄谢?。這種方法的優(yōu)點(diǎn)是很容易。缺點(diǎn)是您無法查詢數(shù)組或字典(它以BLOB形式存儲(chǔ)在數(shù)據(jù)存儲(chǔ)中),并且如果集合很大,則可能不得不將大量數(shù)據(jù)移入/移出數(shù)據(jù)存儲(chǔ)(如果是SQLite數(shù)據(jù)存儲(chǔ))只是為了讀取或修改集合的一小部分。
另一種選擇是使用“核心數(shù)據(jù)”對多關(guān)系來對數(shù)組或字典集合的語義建模。數(shù)組更容易,所以讓我們開始吧。核心數(shù)據(jù)對很多關(guān)系實(shí)際上是在建模一個(gè)集合,因此,如果需要類似數(shù)組的功能,則必須對集合進(jìn)行排序(使用fetched屬性是一種簡便的方法)或向?qū)嶓w添加額外的索引屬性它存儲(chǔ)數(shù)組項(xiàng)并自己管理索引。如果要存儲(chǔ)同質(zhì)數(shù)組(所有條目都是同一類型),則可以為數(shù)組實(shí)體的實(shí)體描述建模。如果不是,則必須決定是使用可轉(zhuǎn)換屬性存儲(chǔ)項(xiàng)目數(shù)據(jù)還是創(chuàng)建項(xiàng)目實(shí)體系列。
為字典建??赡苄枰c存儲(chǔ)鍵和值的一組實(shí)體建立一對多關(guān)系。鍵和值都類似于上述數(shù)組的項(xiàng)目實(shí)體。因此,它們可以是本機(jī)類型(如果您提前知道的話),可轉(zhuǎn)換的屬性或與特定于類型的實(shí)體系列中的實(shí)例的關(guān)系。
如果這聽起來有些令人生畏,那就是。將任意數(shù)據(jù)導(dǎo)入像Core Data這樣的依賴于架構(gòu)的框架是很困難的。
對于結(jié)構(gòu)化數(shù)據(jù)(例如地址),花時(shí)間明確地對實(shí)體建模(例如,地址各部分的屬性)幾乎總是容易的。除了避免所有額外的代碼來為字典建模之外,這還使您的UI更加容易(綁定將“正常工作”),并且使驗(yàn)證邏輯等更加清晰,因?yàn)槠渲泻芏嗫梢杂蒀ore Data處理。
更新資料
從OS X 10.7開始,Core Data包含有序集合類型,可以代替數(shù)組使用。如果您可以定位10.7或更高版本,則這是有序(類似數(shù)組)集合的最佳解決方案。

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
我有一個(gè)類似的問題。就我而言,我想映射一個(gè)字符串?dāng)?shù)組。我聽了巴里的建議,終于使它起作用了。這是一些代碼的樣子(希望可以為遇到此問題的其他人澄清一些事情)...
我的實(shí)體看起來像這樣:
@interface AppointmentSearchResponse : NSManagedObject
@property (nonatomic, retain) NSSet *messages;
@end
我的管理對象模型代碼(核心數(shù)據(jù))代碼如下所示:
NSEntityDescription *entityDescription = [[NSEntityDescription alloc] init];
[entityDescription setName:@"AppointmentSearchResponse"];
[entityDescription setManagedObjectClassName:@"AppointmentSearchResponse"];
NSMutableArray *appointmentSearchResponseProperties = [NSMutableArray array];
NSAttributeDescription *messageType = [[NSAttributeDescription alloc] init];
[messageType setName:@"messages"];
[messageType setAttributeType:NSTransformableAttributeType];
[appointmentSearchResponseProperties addObject:messageType];
[entityDescription setProperties:appointmentSearchResponseProperties];
因此,這里的關(guān)鍵項(xiàng)目是:
我正在使用NSSet作為屬性類型
我使用NSTransformableAttributeType作為核心數(shù)據(jù)托管對象模型中的屬性類型。
- 2 回答
- 0 關(guān)注
- 515 瀏覽
添加回答
舉報(bào)