2012-02-18 74 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