1

コードで何が起こっているのか理解できません:

 for (NSMutableDictionary *dict in jsonResponse) {


     NSString *days = [dict objectForKey:@"dayOfTheWeek"];

     NSArray *arrayDays = [days componentsSeparatedByString:@" "];

     NSLog(@"la var %@ size %lu", days, sizeof(arrayDays));


     for(int i = 0; i<sizeof(arrayDays); i++){

        NSLog(@"el dia %@",[arrayDays objectAtIndex:i]);

     }
}

ログに記録されるもの:

2012-07-02 10:06:57.191 usualBike[1342:f803] var M T W T F size 4
2012-07-02 10:06:57.191 usualBike[1342:f803] day M
2012-07-02 10:06:57.192 usualBike[1342:f803] day T
2012-07-02 10:06:57.192 usualBike[1342:f803] day W
2012-07-02 10:06:57.193 usualBike[1342:f803] day T
2012-07-02 10:06:57.193 usualBike[1342:f803] var S S size 4
2012-07-02 10:06:57.194 usualBike[1342:f803] day S
2012-07-02 10:06:57.194 usualBike[1342:f803] day S

そして、位置3が存在しないため、クラッシュします。

なぜ2回目にサイズが変わらないのですか?1にする必要があります。

前もって感謝します

4

3 に答える 3

1

sizeofは使用しないでください。文字列、辞書、配列などのポインタ型変数に対して修正されたポインタサイズが返されます。

NSArrayのプロパティをカウントする必要があります。

以下のコード行を変更して、

 NSLog(@"la var %@ size %lu", days, sizeof(arrayDays));

この行で:

 NSLog(@"la var %@ size %lu", days, arrayDays.count);

ループステートメントでも同じことを行います。

于 2012-07-02T08:14:41.117 に答える
1

sizeof(theArray)データ型のサイズを計算します。ウィキペディアを参照してください。配列内のオブジェクトの数を返します
[theArray count]theArray.Count

の両方の出現箇所を。に置き換えsizeof(arrayDays)ますarrayDays.Count

注:以下を使用して配列をループすることもできます。

for (NSString* theValue in arrayDays) {
    NSLog(@"el dia %@",theValue);
}
于 2012-07-02T08:14:57.197 に答える
1

Sizeof()固定サイズの配列でのみ機能します。use [arrayDays count]

于 2012-07-02T08:26:19.360 に答える