【问题标题】:iOS: Attributes of object in for loop are null?iOS:for循环中对象的属性为空?
【发布时间】:2012-07-21 06:07:11
【问题描述】:

这是我第一次在 iOS 中使用 for 循环!万岁!

请注意,“bookTitle”是类中的一个 NSString 对象。当此类启动时,它接受一个 String 参数并将 bookTitle 设置为该参数。

books = [[NSMutableArray alloc] initWithObjects:

[[Book alloc] initWithTitle:@"What a great title" andAuthor:@"R Crimson"], 

[[Book alloc] initWithTitle:@"What another great title" andAuthor:@"R Crimson"], 
 nil ];
NSUInteger count = [books count];
for(NSUInteger i= 0; i < count;i++){
    Book *tb= [books objectAtIndex:i];
    if(tb.title=bookTitle){
        nameLabel.text=tb.title;
    }

遗憾的是 tb.title 和 bookTitle 都是空的。应该发生的是,数组中任何具有与 bookTitle 匹配的标题的对象都应该将其标题分配给 nameLabel。

所以我想知道我哪里出错了,以及是否有更好的解决方案?因为标题属性不是唯一标识符,所以如果我将两个具有相同标题的对象添加到书籍中(我不太可能会这样做,但仍然如此!)它会返回多个对象,这不好。

提前致谢。

【问题讨论】:

  • 我认为错误不在您提供的代码中。看来您可能没有正确设置 Book init 方法中的标题。此外,您应该使用 isEqualToString: 来比较 tb.title 和 bookTitle。 = 将 tb.title 设置为 bookTitle。 isEqualToString:检查两个字符串是否相同。

标签: ios for-loop nsmutablearray


【解决方案1】:

您的if 语句中有错误。

if (tb.title = bookTitle)

你只有一个=,所以你一直将tb.title设置为bookTitle

但是,不要添加另一个等号,而是这样做:

if ([tb.title isEqualToString:bookTitle]) {
    ...
}

更多信息here

【讨论】:

  • 哇,我完全忘记了 isEqualToString:。谢谢!我更新了我上面的评论。
  • 太好了,谢谢。遗憾的是,bookTitle 仍然为空,因为我无法将值从前一个视图控制器传递到第二个视图控制器。我想解决这个问题的最好方法是让第一个视图控制器成为第二个视图控制器的代表。感谢您的帮助。
猜你喜欢
  • 2012-10-03
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多