2012-05-02 25 views
0

我目前正在使用initWithDecoder解碼我的數據通過無線傳輸。我注意到的一件事是,當它被稱爲它不能看到範圍內的變量,因此不表現我想要的方式,這裏是我所做的一個例子:解碼我的NSData

首先我編碼所有數據:

-(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的範圍,因此根本不會重複。有沒有解決的辦法?

回答

1

爲什麼不編碼/解碼整個陣列?這將使事情變得更容易...

另外,不要忘記調用[super init...]

-(void) encodeWithCoder: (NSCoder *) encoder 
{ 
     [encoder encodeObject: myArray]; 
} 


-(id) initWithCoder: (NSCoder *) decoder 
{ 
    if ((self = [super init])) 
     self.myArray = [decoder decodeObject]; 
    return self; 
} 
+0

你是什麼意思? – godzilla

+0

我添加了一些代碼,我的答案...希望它可以幫助... – sergio

+0

感謝塞爾吉奧,這似乎已經奏效,還需要進行更多的測試 - 簡單的問題 - 我需要賦予它新的價值正確之前發佈的陣列? – godzilla