【问题标题】:Correct if statement wont work, same statement works in other classes [duplicate]更正 if 语句不起作用,相同的语句在其他类中起作用 [重复]
【发布时间】:2012-09-20 14:44:30
【问题描述】:
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.title = category.categoryName;

    if (self.title == @"Haugesund Motiver" && !motivesLoaded) {
        MotivesDataModel *motiv = [[MotivesDataModel alloc] init];
        motiv.motiveName = @"ksaldkaldsk";
        [category.motives addObject:motiv];
        motivesLoaded = YES;
    }    
}

为什么这不起作用?

我要viewcontroller,每个都有一个TableView。

第一个视图控制器显示类别对象,其中包含一个名称和另一个称为动机的数组。

第二个视图控制器应该显示 category.motives 数组。

category 对象与 segue 一起传递,并且工作正常。

如果之前没有填充过 nsmutablearray,我会尝试填充它。

但是 if 语句不起作用。每次视图加载时,它都会将对象添加到 motives 数组中,即使 motivesLoaded 布尔值更改为 YES

【问题讨论】:

标签: objective-c xcode if-statement


【解决方案1】:

你不应该用==检查字符串的相等性,这只是检查它们是否是同一个对象

你应该使用

[self.title isEqualToString:@"Haugesund Motiver"]

【讨论】:

  • 谢谢。但主要问题仍然存在。它每次都会创建一个新对象并将其添加到 motives 数组中,即使 If 语句只有在 motivesLoaded 为 false 时才应该“工作”。
  • 那么 if 语句没问题,尝试在 if 语句之前记录 motivesLoaded
  • @EspenBirk 请记住 !BOOL 表示 BOOL 为 NO 或 nil。
  • 是的,我知道。如果我记得正确 BOOL 不是默认值。因此,如果 motiveLoaded = NO 那么它应该创建一个对象并将其放入数组中。创建对象后,它应该设置 motiveLoaded = YES。可能是愚蠢的问题,但我如何 NSLog 一个布尔值?
  • 正确,但只是把它放在那里,我偏爱:NSLog(myBOOL ? @"Yes" : @"No");
【解决方案2】:
self.title == @"Haugesund Motiver"

检查指针的相等性,因此如果 self.title 具有相同的名称,但有另一个 String 实例 @"Haugesund Motiver",则检查将失败,因此您应该使用 [NSString isEqualToString:] 方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2018-08-28
    • 2012-11-30
    • 2023-02-06
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多