0

私は現在、initWithDecoderを使用して無線で送信されたデータをデコードしています。私が気づいたことの1つは、呼び出されたときにスコープ内の変数を表示できないため、意図したとおりに動作しないことです。これは、私が行ったことの例です。

まず、すべてのデータをエンコードします。

-(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のスコープ外であるため、まったく反復されないことです。これを回避する方法はありますか?

4

1 に答える 1

1

配列全体をエンコード/デコードしないのはなぜですか? これは物事をより簡単にするでしょう...

また、お電話もお忘れなく[super init...]

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


-(id) initWithCoder: (NSCoder *) decoder
{
   if ((self = [super init]))
       self.myArray = [decoder decodeObject];
   return self;
}
于 2012-05-02T16:51:59.357 に答える