2012-01-25 18 views
1

2D NSMutableArrayをマッピング目的で使用して、単純なMacベースの2Dタイリングエンジンを設定しようとしています。私はNSViewControllerのサブクラスを使用してマップオブジェクトへの参照(配列を含む)を行い、MVCの整合性を維持するためにタイルデータの描画要求をマップに渡します。しかし、私のアプリケーションは、私のdrawRectコードが起動を開始する前にオブジェクトを配列に移入していないようです。NSMutableArrayがロードされる前に塗りつぶされていない

このアプリケーションを書かれたとおりに実行するたびに、ウィンドウが読み込まれず、デバッガの「 - [__ NSArrayM objectAtIndex:]:インデックスが空の配列の境界を超えています」というエラーメッセージが表示されます。私の知る限りでは、ビューは実際に表示される前に0で完全に初期化される必要があります。ここで

は私のNSViewControllerサブクラスから-loadView方法であって、

- (void)loadView 
{ 
    currentMap = [[TestMap alloc] init]; 
    [super loadView]; 
} 

、ここでは私のマップオブジェクトからinitメソッドです:ブレークポイントの

- (id)init 
{ 
    dimensions = NSMakeSize(15.0,20.0); 
    tileset = [[TestTileset alloc] init]; 
    map = [NSMutableArray arrayWithCapacity:15]; 
    for (int i = 0; i == 14; i++) 
    { 
     NSMutableArray *tempRow = [NSMutableArray arrayWithCapacity:20]; 
     for (int j = 0; j == 19; i++) 
     { 
      NSNumber *tempID = [NSNumber numberWithInt:0]; 
      [tempRow addObject:tempID]; 
     } 
     [map addObject:tempRow]; 
    } 
    return self; 
} 

賢明な使用は

ことが示されました
[super loadView] 

はinitがforループを開始する前に何らかの形で呼び出されています - そしてobvio usly、配列を参照しなければならない私のdrawRectコードがそこから続き、すぐに失敗します。私は間違ったことや秩序の悪いことをしているに違いないが、それが何であるかを知ることはできない。

答えて

2

!=の代わりに==があるため、forループはどちらも実行されません。ループは次のようにする必要があります:

for (int i = 0; i != 15; i++) 
{ 
    NSMutableArray *tempRow = [NSMutableArray arrayWithCapacity:20]; 
    for (int j = 0; j != 20; j++) 
    { 
     NSNumber *tempID = [NSNumber numberWithInt:0]; 
     [tempRow addObject:tempID]; 
    } 
    [map addObject:tempRow]; 
} 
+0

実際、そうでした。私の脳が今朝拒否したことを指摘してくれてありがとう。 :) –

関連する問題