-5

「25 kg」、「26 kg」...「149 kg」、「150 kg」の配列が必要です。タスクを簡素化するために、私はこれを書きました:

-(NSMutableArray*)weightArray{

    NSMutableArray *myArray;
    for (int i=25; i++; i<150){
        NSString *weightString;
        weightString = [NSString stringWithFormat:@"%d kg", i];
        [myArray addObject:weightString];
    }
    return myArray;
}

そして、私のビューのviewDidloadにNSLog (@"%@", [self weightArray]); 次のように書きました:しかし、それは機能していないようです。構文のような明らかなものが欠けている可能性があります。なぜ機能しないのですか?

更新:最後に解決策を見つけました-最初に、 @implementation セクションで weightArray を宣言してから、次のように書きました:

-(void)fillingArray{

    if (!weightArray){
        for (int i=25; i<150 ;i++){
            NSString *weightString = [[NSMutableArray alloc] init];
            weightString = [NSString stringWithFormat:@"%d kg", i];
            [weightArray addObject:weightString];
            NSLog(@"%@", weightString);
        }
    }

}

viewDidLoad で私は書いた:

[self fillingArray];  
 NSLog(@"%@", weightArray);

私の問題はその文字列 NSLog(@"%@", [self weightArray]); にあったと思います。角括弧内はメソッド名であると思われますが、配列を指そうとしましたが、何も起こりませんでした。

4

2 に答える 2

7

あなたがしていることには3つの問題があります。

  1. NSMutableArray *myArray = [[NSMutableArray alloc] init];実際に存在するように、次のように配列を作成する必要があります。
  2. 数値ではなく配列を lgging しているため、必要NSLogがあります。NSLog (@"%@", [self weightArray]);
  3. (これを指摘してくれた rmaddy に感謝します) あなたのforステートメントの 2 番目と 3 番目の部分が逆になっています。だから、i++あなたの状態であり、常に非ゼロです。この無限ループが、マシンのロックアップの原因です。

編集:これは、配列を一度だけ作成するより良い方法です。

-(NSMutableArray*)weightArray{

    static NSMutableArray *myArray;
    if (!myArray){
        myArray = [[NSMutableArray alloc] init];
        for (int i=25; i<150 ;i++){
            NSString *weightString;
            weightString = [NSString stringWithFormat:@"%d kg", i];
            [myArray addObject:weightString];
        }
    }
    return myArray;
}
于 2013-03-30T22:09:46.603 に答える
2

配列を割り当てて初期化しません。したがって、不確定な値があり、プログラムは未定義の動作を呼び出します。実際に作成します:

NSMutableArray *myArray = [NSMutableArray new];
于 2013-03-30T22:03:29.573 に答える