【问题标题】:Objective-C , array initializationObjective-C , 数组初始化
【发布时间】:2011-04-12 05:05:57
【问题描述】:
int num1, num2,num3,num4, i=0;
NSMutableArray *charArray = [[NSMutableArray alloc] init];

while(num1 != 0 && num2 != 0) {
  num3 = num1 & 1;
  num4 = num2 & 1;
  if(num3 != num4) {
    if(num3 == 0) {
      charArray[i++]= '0';
      charArray[i++]= '1';  
    } else {
      charArray[i++]='1';
      charArray[i++]='0';   
    }
  }
  num1 = num1 > 1;
  num2 = num2 > 1;
}

}

我对objective-c有点陌生,有人能告诉我这有什么问题吗?

【问题讨论】:

  • 你的花括号不平衡。

标签: iphone objective-c xcode nsarray


【解决方案1】:

您不能将常规的类似数组的下标与 NSArrays(和 NSMutableArrays)一起使用。要添加项目,您需要调用addObject 方法。即[charArray addObject:obj]

另一个警告是你不能在 NSArray 中添加一个裸露的char,它必须是 Objective-C 类型。您可以使用 NSNumber 类来包装它。所以你的代码将是:

[charArray addObject:[NSNumber numberWithChar:'0']];
[charArray addObject:[NSNumber numberWithChar:'1']];

但是您仍然可以使用常规的 C 数组并且不修改您的代码,这可能是您的情况下更好的解决方案。即

char charArray[MAX_SIZE];

【讨论】:

  • 那么这里没有使用 i++ 吗?
  • addObject 自动在末尾追加一个值。
  • 认为这些数字 num1 和 num2 是两次 itouch 中执行的抖动事件输出的二进制版本。输出位是这两个数字之间不相似的位。所以这个数组中的位在被填充后应该被转换回十进制数。这可以做到吗?希望这是有道理的
【解决方案2】:

您不能使用 C 的 [] 语法访问 NSMutableArray

您需要使用-[NSMutableArray addObject:]-[NSMutableArray insertObject:atIndex:] 方法。

【讨论】:

  • 那么我如何增加 i 的值并放置这些值?
  • @user531,如果你使用 addObject,你不需要 i,因为它会自动为你添加到末尾。
  • 你看看我在上面的一个 cmets 中提出的问题,如果你能帮我解决这个问题,请告诉我?
猜你喜欢
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
相关资源
最近更新 更多