gist

2012年2月29日水曜日

[Objective-C] NSMutableArrayのremoveObjectでハマった

    NSNumber *n1 = [NSNumber numberWithInt:1];
    NSNumber *n2 = [NSNumber numberWithInt:2];
    NSNumber *n3 = [NSNumber numberWithInt:3];
    NSNumber *n4 = [NSNumber numberWithFloat:1.00000f];
    
    // ポインタを表示
    NSLog(@"n1=%p", n1);
    NSLog(@"n2=%p", n2);
    NSLog(@"n3=%p", n3);
    NSLog(@"n4=%p", n4);
    // それぞれ違うポインタが表示される
    
    // arr作成。
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:n1, n2, n3, n4, nil];
    
    NSLog(@"削除前:%@", arr); // 1,2,3,4
    
    // arrから最後のオブジェクトを取得する
    id n = [arr lastObject];
    // そのオブジェクトをarrから削除する
    [arr removeObject:n];
    
    NSLog(@"削除後:%@", arr); // 2,3
    
    // removeObjectでは、ポインタが同じものを削除するのではなく、
    // 値が同じオブジェクトを削除する。


最後のオブジェクトだけを削除したい時は、


[arr removeLastObject];

を使うべし。

5時間ハマった。コアな箇所だったので特定に時間がかかってしまいました。ドキュメントを良く調べてなかったのが今日の教訓。おやすみなさい。

0 件のコメント: