我正在使用initWithDecoder通过无线方式解码我的数据。我注意到的一件事是,当它被调用时,它无法看到范围内的变量,因此不会按我想要的方式运行,这是我所做的一个例子:
首先我编码所有数据:
-(void) encodeWithCoder: (NSCoder *) encoder
{
for(BaseGroup *attackCard in myArray)
{
[encoder encodeObject: attackCard];
}
}
在同一个班级中我会记下我拥有的物品数量:
self.numItems = [self.myArray count];
并且在initWithCoder中我期望迭代和解码编码的NSData,如下所示
-(id) initWithCoder: (NSCoder *) decoder
{
for(int i =0; i < self.numItems; i++)
{
[self.myArray addObject:[decoder decodeObject]];
}
return self;
}
麻烦的是initWithCoder超出变量numItems的范围,因此根本不进行迭代。有办法解决这个问题吗?
答案 0 :(得分:1)
为什么不对整个数组进行编码/解码?这会让事情变得更容易......
此外,请不要忘记致电[super init...]
!
-(void) encodeWithCoder: (NSCoder *) encoder
{
[encoder encodeObject: myArray];
}
-(id) initWithCoder: (NSCoder *) decoder
{
if ((self = [super init]))
self.myArray = [decoder decodeObject];
return self;
}