2 回答

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

TA貢獻1893條經驗 獲得超10個贊
我有一個類似的問題。就我而言,我想映射一個字符串數組。我聽了巴里的建議,終于使它起作用了。這是一些代碼的樣子(希望可以為遇到此問題的其他人澄清一些事情)...
我的實體看起來像這樣:
@interface AppointmentSearchResponse : NSManagedObject
@property (nonatomic, retain) NSSet *messages;
@end
我的管理對象模型代碼(核心數據)代碼如下所示:
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];
因此,這里的關鍵項目是:
我正在使用NSSet作為屬性類型
我使用NSTransformableAttributeType作為核心數據托管對象模型中的屬性類型。
- 2 回答
- 0 關注
- 517 瀏覽
添加回答
舉報