簡體   English   中英

iCloud-如何保存包含自定義對象數組的檔案

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

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