2012-05-02 6 views
0

私は現在、initWithDecoderを使用してデータをデコードしています。私が気付いた事の一つは、スコープ内の変数を見ることができないので、私が意図したとおりの振る舞いをしないときです。NSDataをデコードする

最初に私はすべてエンコードしますデータ:

self.numItems = [self.myArray count]; 

をしてinitWithCoder内私は

を次のようにエンコードされたNSDataを反復して復号化するために期待しています。同じクラス内

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

は私が持っているアイテムの数をメモしておきます

-(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

Sergioさん、働いているようですが、さらにテストを実行する必要があります - 簡単な質問 - 新しい値を割り当てる前に配列を解放する必要があります。 ? – godzilla