目标 C:按下按钮后切换属性的布尔值的问题

Posted

技术标签:

【中文标题】目标 C:按下按钮后切换属性的布尔值的问题【英文标题】:Objective C: Problem in switching BOOLEAN value of property after button press 【发布时间】: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”。如何切换值??

【问题讨论】:

【参考方案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。不过感谢您的反馈。

以上是关于目标 C:按下按钮后切换属性的布尔值的问题的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 如何切换核心数据中的所有布尔值

IOS/目标 C:Coredata NSPredicate 与布尔值

如何在意图之间传递布尔值

布尔包装?制作一个 `BOOL` 值的对象。 (目标-C)

Unity - 用于切换值的按钮事件[重复]

React JS - 切换布尔值