【问题标题】:Objective C: Problem in switching BOOLEAN value of property after button press目标 C:按下按钮后切换属性的布尔值的问题
【发布时间】:2011-06-24 00:38:05
【问题描述】:

我正在尝试切换属性“isLiked”的布尔值,如下面的代码所示

//BOOL isLiked is defined in the header file as property of answer class
- (void)buttonPressed
{
    NSLog(@"button pressed");

    if ([btnType isEqualToString:@"like"]) 
    {
       self.answer.isLiked = !self.answer.isLiked;  
       NSLog(@"answer is: %i",self.answer.isLiked);
   }

}

当我打印出“self.answer.isLiked”的值时,我看到返回的值始终为“0”。如何切换值??

【问题讨论】:

    标签: objective-c ios uibutton


    【解决方案1】:

    我猜self.answer 实际上是零。这将导致self.answer.isLiked = !self.answer.isLiked 什么都不做,并且会导致您的 NSLog 实际上记录 nil 的整数值,即 0。

    【讨论】:

    • 您对我的 self.answer 为 nil 的事实是完全正确的。我修复了它现在按预期工作。谢谢!
    【解决方案2】:

    我怀疑你的标题看起来有点像:

    @property (nonatomic, getter=isLiked) BOOL liked;
    

    在这种情况下,您的按钮按下代码需要是:

    self.answer.liked = !self.answer.isLiked;
    NSLog(@"answer is: %i",self.answer.isLiked);
    

    注意你的布尔值的设置器去掉了'is'前缀,并使第一个字母小写。

    【讨论】:

    • 取决于编译器设置。我在用 4.0.2 发布一个新项目之前对其进行了测试,它编译得很好,但就是没有用。
    • 编译器应该警告调用一个它不知道的方法 (setIsLiked:),它应该在运行时触发一个异常。
    • @Kevin Ballard:嗯,这让我担心我的机器是否正常。它安装了 XCode 3、4.0.2 和 4.2。我希望在 4.2 安装期间不选中 unix 工具就足够了,但听起来我已经构建了一个我无法信任的 frankencompiler。不过感谢您的反馈。
    猜你喜欢
    • 2021-08-02
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    相关资源
    最近更新 更多