[英]iCloud - How to save archive containing array of custom objects
我開發了一個小型應用程序,它通過歸檔包含以下內容的自定義對象數組,將其本地存儲在iOS中:
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *dateCreated;
@property (nonatomic, copy) NSString *desc;
@property (nonatomic, copy) NSString *url;
我想使用iCloud同步存檔,我相信推薦的機制是通過UIDocument子類。 我發現的所有UIDocument示例都使用1個單個NSString來實現單個實例,所以我有點困惑如何同步整個自定義對象數組但如何利用UIDocument(就像我今天通過NSCoding在本地進行的那樣)。
我應該創建包含上面列出的屬性的UIDocument對象的數組,還是應該創建包含上述數據對象的1個實例的UIDocument的實例,然后創建包含所有實例的數組,還是應該一個UIUI包含完整的數組?自定義對象?
我做了一些研究,但我仍然感到困惑。 最后,我只需要同步一個文件,其中包含所述自定義對象的數組。
在此先感謝您的幫助
我今天擁有的是一個如上所述的自定義類,帶有4個稱為Snippet的字符串,並且在我的根視圖控制器中,我有一個NSMutableArray稱為list,在其中我添加了該Snippet類的每個新實例。
self.list = [[NSMutableArray alloc] init];
Snippet *newEntry = [[Snippet alloc] init];
[self.list addObject:newEntry];
是否應該創建擁有自定義對象數組的UI Document子類?
docs中的示例確實顯示了一個只有一個字符串的UIDocument子類,但是它從-contentsForType:error:
返回了NSData。 您可以使用NSKeyedArchiver在NSData中存儲任意數量的對象。 閱讀序列化對象以了解如何使用NSKeyedArchiver編碼對象(並繼續閱讀以了解如何將它們找回!)。
以您的屬性為例...
@interface MyDocument : UIDocument
{
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *dateCreated;
@property (nonatomic, copy) NSString *desc;
@property (nonatomic, copy) NSString *url;
@end
@implementation MyDocument
//...
- (id)contentsForType:(NSString *)typeName error:(NSError **)outError
{
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:name forKey:@"name"];
[archiver encodeObject:dateCreated forKey:@"created"];
[archiver encodeObject:desc forKey:@"desc"];
[archiver encodeObject:url forKey:@"url"];
[archiver finishEncoding];
// release archiver if you're not using ARC
return data;
}
@end;
警告:我尚未編譯上面的代碼,因此無法保證。 這應作為示例說明使用存檔器將多個對象存儲在單個數據對象中,然后您可以將其作為文檔的內容返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.