2016-07-17 2 views
0
#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     NSMutableArray *groceries; 
     NSString *a = (@"loaf of bread"); 
     NSString *b = (@"stick of butter"); 
     NSString *c = (@"big ass cookie"); 

     [groceries addObject:a]; 
     [groceries addObject:b]; 
     [groceries addObject:c]; 

     for (NSString *d in groceries){ 
      NSLog(@"%@", d); 
     } 
    } 

    return 0; 
} 

なぜこれが機能しないのですか?なにが問題ですか?ありがとう。 私はこの瞬間にそれを理解できないようですが、forループは挑戦的にハングアップしているようです。なぜ食料品リストを印刷しないのですか? NSMuteableArray高速ループ列挙の場合

+4

を食料品は初期化されていません – Ryan

+1

'groceries = [[NSMutableArray alloc] init];' – Wain

+0

デバッガを使用して、このコードをステップ実行し、各ステップで各変数の値を調べます。問題はかなり明確になるでしょう。 – rmaddy

答えて

0

NSMutableArrayを初期化していない間は、それはゼロです。初期化されていない可変配列にオブジェクトを追加すると常にnilが返されます。

まずあなたが食料品を初期化する必要があります。

NSMutableArray *groceries = [NSMutableArray new]; 

以上、私に好か方法:

NSMutableArray *groceries = @[].mutableCopy; 

あなたのケースでは、たとえば、あなたがそう宣言することができます。

NSMutableArray *groceries = @[@"loaf of bread", @"stick of butter", @"big ass cookie"].mutableCopy; 
+0

2番目の方法ではなぜリテラルシンボル@を使用していますか?空白の括弧とピリオドとmutableCopyメソッドは非常に混乱しています...もっと詳しく説明できます –

+0

'[[NSArray alloc] init]'は '[NSArray new]' '@ []'、 '[[NSMutableArray] alloc] init]'は '[NSMutableArray new]'と '@ []。mutableCopy'と同じです。また、 '[NSDictionary new]'は '@ {}'と同じですが、 '[NSMutableDictionary new]'は '@ {}と等価ですmutableCopy' – Igor

+0

これは単純に短いバージョンです。 – Igor

関連する問題