0

2D で for-each ステートメントを使用する方法を学びたいですNSMutableArray。私のコードは以下です。3 番目 (最も内側) の for ステートメントで例外をスローします。例外は次のとおりです。

"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber count]: unrecognized selector sent to instance"

私のコード:

NSMutableArray* subTryingSet=[NSMutableArray arrayWithArray:[self genSetNumbers:arrRandoms withSize:4]];

for (NSMutableArray* oneRow in subTryingSet) {
    for (NSMutableArray* w in oneRow) {
        for (int i=0;i<w.count;i++) {
            NSLog(@"%d", [[w objectAtIndex:i] intValue]);
        }
    }
}
4

2 に答える 2

3

コードを最初にすばやく確認した後:

これを変更してみてください:

    NSLog(@"%d", [[w objectAtIndex:i] intValue]);

と:

   NSLog(@"%i", [[w objectAtIndex:i] intValue]);

編集

「3番目の「forstatement」で例外がスローされるため、slogに移動できません」

うーん...oneRow内のすべてのオブジェクトがNSMutableArrayであることを確認しますか?

次のように確認してみてください。

for (NSMutableArray* oneRow in subTryingSet) {
  if ([oneRow.class isSubclassOfClass:[NSMutableArray class]]) {
      for (NSMutableArray* w in oneRow) {
        if ([w.class isSubclassOfClass:[NSMutableArray class]]) {
            for (int i=0;i<w.count;i++) {
                NSLog(@"%d", [[w objectAtIndex:i] intValue]);
            }
        }
      }
  }
}
于 2012-04-13T09:45:16.050 に答える
0

このカスタム目的の c メソッドを使用して反復できます

-(void)loopMultArray:(NSArray*)a walk:(void(^)(id node,int index,int zindex))n{

    void(^callback)(id node,int index,int zindex) = Block_copy(n);

    NSMutableArray *l=[[[NSMutableArray alloc] initWithObjects:a,nil] autorelease];
    int c=1;
    //This first loop will loop until the count var is stable//
    for(int r=0;r<c;r++){
        //This loop will loop thru the child element list//
        for(int z=0;z<[[l objectAtIndex:r] count];z++){

            callback([[l objectAtIndex:r] objectAtIndex:z],z,r);

            if([[[l objectAtIndex:r] objectAtIndex:z] isKindOfClass:[NSArray class]]){
                [l addObject:[[l objectAtIndex:r] objectAtIndex:z]];
                c++;
            }//IF
        }//FOR
    }//FOR

    Block_release(callback);

}
于 2014-09-13T17:24:10.023 に答える