2012-02-18 78 views
3

我有一個mainObjectArray(NSMutableArray),它填充了一個自定義類的實例。每個實例本身就是一個數組,每個數組中的對象是NSDates,NSStrings,BOOL以及更多包含相似對象的數組。NSCoder - 使用多層嵌套數組編碼數組

我一直沒能確定是,是否有可能,在

內 - (空)encodeWithCoder:(NSCoder *)編碼方法,只是這樣說:

[編碼器encodeWithObject:mainObjectArray];

還是必須分別編碼每個實例中的每個對象?這將是一個痛苦...

您的幫助將非常感激。

+0

你是什麼意思「每個實例本身就是一個數組」?你是否僅僅意味着你的自定義類實例**具有**數組屬性?或者它是'NSArray'的子類? – yuji 2012-02-18 17:59:15

+0

對不起,不準確。我的自定義類是NSObject的一個子類,並且具有NSMutableArray,int,NSString,BOOL和NSDate作爲屬性。 – Charl 2012-02-19 06:33:53

+0

我遇到了一個與此非常相似的問題。我將如何去保存一個NSArray中聲明的自定義對象的對象? – Stuartsoft 2012-07-19 13:39:27

回答

5

只需在自定義類中實現編碼和解碼方法。那會做。一些示例,

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:[NSNumber numberWithInt:pageNumber] forKey:@"pageNumber"]; 
    [encoder encodeObject:path forKey:@"path"]; 
    [encoder encodeObject:array forKey:@"array"]; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if(self = [super init]) 
    { 
     self.pageNumber = [[aDecoder decodeObjectForKey:@"pageNumber"] intValue]; 
     self.path = [aDecoder decodeObjectForKey:@"path"]; 
     self.array = [aDecoder decodeObjectForKey:@"array"]; 
    } 
} 

您可以看到共有三種數據類型被編碼和解碼 - int,string,array。

希望這會有所幫助。

+0

嗨cocoakomali!感謝您的答覆。我不明白的是,如果可以像上面的例子那樣對數組進行編碼,爲什麼我不能僅僅使用mainObjectArray上的一行代碼進行編碼? – Charl 2012-02-19 06:32:38

+0

因爲你的mainObjectArray是由一個自定義的類構成的,所以你應該象我一樣實現這些方法。 – cocoakomali 2012-02-20 16:13:48

+0

我遇到了一個與此非常相似的問題。我將如何去保存一個NSArray中聲明的自定義對象的對象? – Stuartsoft 2012-07-19 13:38:52