【问题标题】:While-Loop works but not the if statement?While-Loop 有效,但 if 语句无效?
【发布时间】:2011-04-18 13:43:18
【问题描述】:

我的代码中有这个while 循环。自从我在控制台中打印了我的 i++ 以来,循环似乎工作正常。但由于某种原因,它第一次只检查我的if 语句。我只能在NSMutableArray 中添加一个名为sectionZeroTitleArray 的标题。我在这个循环中有很多数组,所以它可能会让人困惑。我会尽力解释。

这是我想要做的: 遍历数组(topicArray)的长度。如果数组的(topicArray)与另一个数组的(anotherArray)第一个对象相同,则将具有与 topicArray 相同索引(tit​​leArray)的对象添加到新的 MutableArray(sectionZeroTitleArray)。

我确定我做了一些愚蠢的事情,也许整天没有盯着这个的人可以解决我?请和谢谢。

while (i < (topicArray.count)) {
  if ([topicArray objectAtIndex:i] == [anotherArray objectAtIndex:0]) {
   [sectionZeroTitleArray addObject:[titleArray objectAtIndex:i]];
  }
  NSLog(@"sectionZeroLoopCount: %d", i);
  i++;
 }

【问题讨论】:

  • 在if语句前添加以下内容:NSLog(@"topicArray value:%@, anotherArray value:%@", [topicArray objectAtIndex:1], [anotherArray objectAtIndex:0]);
  • 您的 topicArray 是否包含两次完全相同的对象?如果不是,那很自然,它只进入 if 括号一次。当然,你的意思不是“objectAtIndex:i”?
  • 另外,存储在数组中的对象的类型是什么?通常,您想使用 isEqual: 或 isEqualToString: 而不是 ==。
  • 你必须定义你所说的“是相同的”是什么意思。现在你已经写了 == 这意味着指针指向同一个对象(指针具有相同的值)。
  • 伙计,你们病了,哈哈,我在 5 分钟前发布了帖子,每个人都已经有了答案。我喜欢这个社区,你们都很棒。如果可以的话,我会给你所有的复选标记。

标签: iphone arrays xcode if-statement while-loop


【解决方案1】:

当您使用== 时,您正在检查指针相等性。你确定你要这么做吗?你期待的类型是什么?如果是NSString,则使用isEqualToString:,否则使用NSObjectisEqual:方法:

如果预期类型是NSString

if([[topicArray objectAtIndex:i] isEqualToString:[anotherArray objectAtIndex:0]]) {
   //...
}

否则,您可能应该这样做:

if([[topicArray objectAtIndex:i] isEqual:[anotherArray objectAtIndex:0]]) {
   //...
}

【讨论】:

    【解决方案2】:

    是的,您是在比较指针而不是值。查看NSString的文档,特别是isEqualToString:比较字符串的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多