【问题标题】:arrays, sizes not expected value数组,大小不是预期值
【发布时间】:2012-07-02 08:10:56
【问题描述】:

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

 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。

提前谢谢你

【问题讨论】:

    标签: iphone objective-c ios xcode nsarray


    【解决方案1】:

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

    将两个出现的sizeof(arrayDays) 替换为arrayDays.Count

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

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

    【讨论】:

      【解决方案2】:

      你不应该使用 sizeof。它会返回指针大小,它适用于任何指针类型变量,如字符串、字典、数组等。

      你应该计算 NSArray 的属性。

      更改下面的代码行,

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

      用这一行:

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

      在循环语句中也做同样的事情。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-12
          • 1970-01-01
          相关资源
          最近更新 更多