亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

最佳實踐?-數組/字典作為核心數據實體屬性

最佳實踐?-數組/字典作為核心數據實體屬性

iOS
森林海 2019-10-14 14:27:24
我是Core Data的新手。我注意到集合類型不能用作屬性類型,并且想知道最有效的方式是將數組/字典類型數據存儲為屬性(例如,組成街道,城市等地址的元素)不需要單獨的實體,并且比單獨的屬性/字段更方便地存儲為字典/數組。謝謝。
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

核心數據中沒有“本機”數組或字典類型。您可以將NSArrayNSDictionary作為可轉換屬性存儲。這將用于將NSCoding數組或字典序列化為NSData屬性(并在訪問時適當地反序列化)。這種方法的優點是很容易。缺點是您無法查詢數組或字典(它以BLOB形式存儲在數據存儲中),并且如果集合很大,則可能不得不將大量數據移入/移出數據存儲(如果是SQLite數據存儲)只是為了讀取或修改集合的一小部分。

另一種選擇是使用“核心數據”對多關系來對數組或字典集合的語義建模。數組更容易,所以讓我們開始吧。核心數據對很多關系實際上是在建模一個集合,因此,如果需要類似數組的功能,則必須對集合進行排序(使用fetched屬性是一種簡便的方法)或向實體添加額外的索引屬性它存儲數組項并自己管理索引。如果要存儲同質數組(所有條目都是同一類型),則可以為數組實體的實體描述建模。如果不是,則必須決定是使用可轉換屬性存儲項目數據還是創建項目實體系列。

為字典建??赡苄枰c存儲鍵和值的一組實體建立一對多關系。鍵和值都類似于上述數組的項目實體。因此,它們可以是本機類型(如果您提前知道的話),可轉換的屬性或與特定于類型的實體系列中的實例的關系。

如果這聽起來有些令人生畏,那就是。將任意數據導入像Core Data這樣的依賴于架構的框架是很困難的。

對于結構化數據(例如地址),花時間明確地對實體建模(例如,地址各部分的屬性)幾乎總是容易的。除了避免所有額外的代碼來為字典建模之外,這還使您的UI更加容易(綁定將“正常工作”),并且使驗證邏輯等更加清晰,因為其中很多可以由Core Data處理。

更新資料

從OS X 10.7開始,Core Data包含有序集合類型,可以代替數組使用。如果您可以定位10.7或更高版本,則這是有序(類似數組)集合的最佳解決方案。


查看完整回答
反對 回復 2019-10-14
?
白豬掌柜的

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作為核心數據托管對象模型中的屬性類型。


查看完整回答
反對 回復 2019-10-14
  • 2 回答
  • 0 關注
  • 517 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號