2011-12-12 59 views
4

我已經在iOS中通過歸檔自定義對象包含數組開發了在本地存儲一個小的應用程序:icloud的 - 如何保存包含自定義的數組歸檔對象

@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實例,然後創建一個包含所有實例的數組,或者應該包含1個單個UIDocument自定義對象的完整數組?

我已經做了一些研究,但我仍然困惑。 最後,我需要同步一個包含所述自定義對象數組的文件。

在此先感謝您的幫助

我今天是以上4串稱爲片段,並在我的根視圖控制器描述我有一個NSMutableArray叫列表,其中我添加的每一個新實例的自定義類片段類。

self.list = [[NSMutableArray alloc] init]; 
Snippet *newEntry = [[Snippet alloc] init]; 
[self.list addObject:newEntry]; 

我應該創建一個擁有自定義對象數組的UI文檔子類嗎?

回答

2

example in the docs確實顯示一個UIDocument子類,它只有一個字符串,但它返回一個來自-contentsForType:error:的NSData。您可以使用NSKeyedArchiver在NSData中存儲任意數量的對象。閱讀Serializing Objects,瞭解如何使用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; 

警告:我沒有編譯上面的代碼,所以沒有保證。這應該作爲一個例子來說明如何使用存檔器將多個對象存儲在單個數據對象中,您可以將其作爲文檔內容返回。

+0

感謝您的回答。所以如果我正確理解你,我可以使用+(NSData *)archivedDataWithRootObject:(id)rootObject與數組,然後 - (id)contentsForType:(NSString *)typeName錯誤:(NSError **)outError歸檔整個數組1 UIDocument的單一實例 – Will

+0

如何在這種情況下聲明UIDocument? – Will

+0

我沒有看到你在說什麼數組。我會添加上面的代碼片段來嘗試提供幫助。 – Caleb

相關問題