数组,大小不是预期值

时间:2012-07-02 08:10:56

标签: iphone objective-c ios xcode nsarray

我无法理解我的代码中发生了什么:

 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不存在。

为什么尺寸不会第二次改变?它应该是1。

提前谢谢

3 个答案:

答案 0 :(得分:1)

你不应该使用sizeof。它将返回指针大小,该指针大小可修复任何指针类型变量,如字符串,字典,数组等。

你应该算上NSArray的财产。

更改以下代码行,

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

这一行:

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

也在循环语句中执行相同的操作。

答案 1 :(得分:1)

sizeof(theArray)计算数据类型的大小,请参阅Wikipedia [theArray count]theArray.Count返回数组中对象的数量。

sizeof(arrayDays)的出现次数替换为arrayDays.Count

注意:您还可以使用以下方法循环数组:

for (NSString* theValue in arrayDays) {
    NSLog(@"el dia %@",theValue);
}

答案 2 :(得分:1)

Sizeof()仅适用于固定大小的数组.use [arrayDays count]