Ios 语义问题:没有为属性赋值的setter方法“setisSelected:”

Ios 语义问题:没有为属性赋值的setter方法“setisSelected:”,ios,objective-c,Ios,Objective C,我对Objective-C还不熟悉,事实上,我已经开始学习它好几个小时了 我目前正在观看斯坦福大学关于iOS开发的最新讲座,在第二节讲座中,Hegarty开始添加一个基本按钮,单击该按钮即可选中。非常基本的东西,但是我不知道是什么导致了我的XCode中的这个错误,而同样的代码在课堂视频中运行良好 以下是错误消息: CardGameViewController.m Semantic Issue No setter method 'setIsSelected:' for assig

我对Objective-C还不熟悉,事实上,我已经开始学习它好几个小时了

我目前正在观看斯坦福大学关于iOS开发的最新讲座,在第二节讲座中,Hegarty开始添加一个基本按钮,单击该按钮即可选中。非常基本的东西,但是我不知道是什么导致了我的XCode中的这个错误,而同样的代码在课堂视频中运行良好

以下是错误消息:

CardGameViewController.m
    Semantic Issue
     No setter method 'setIsSelected:' for assignment to property
这是我的CardGameViewController.h文件:

#import <UIKit/UIKit.h>

@interface CardGameViewController : UIViewController

@end
我正在使用XCode版本4.6.3,构建一个单视图iPhone应用程序,并在iPhone 6.1模拟器中运行它

我在我的视频中观察到的属性isSelected的一个区别是,在视频中isSelected是从UIControl继承的,而在我的代码中,alt单击时出现的小文档表示它是从UITableViewCell继承的

我认为这可能是这个错误背后的原因,但我不知道这些术语是什么意思

有人能帮我解决这个问题吗?提前谢谢

它被选中,而不是被选中:

已选择但未选择:

特定@property的BOOL值使用稍微不同的方法模式并不少见,其中setter是-set:还有一个替代getter for-is,这可能会在通过属性或KVC访问时造成一些混乱

在这种情况下,正如@shem所指出的,您要查找的属性是选中的,即使它在API中以-isSelected的形式公开,如果您要向它发送消息,例如[sender isSelected]

如果您查看UIControl中属性的声明,可以看到这一点,因为UIButton是UIControl的子类:

注意,它覆盖getter,指示用于实现所选属性的消息实际上是-setSelected:和-isSelected。不过,最后,这并不影响使用点表示法时访问属性的方式,它始终只是sender.selected

只有在查看使用方法调用的示例代码,然后使用属性实现时,这才真正重要。

对于特定@property的BOOL值来说,使用稍微不同的方法模式并不少见,其中setter是-set:并且-is有一个替代getter,当通过属性或KVC访问时,可能会导致一些混乱

在这种情况下,正如@shem所指出的,您要查找的属性是选中的,即使它在API中以-isSelected的形式公开,如果您要向它发送消息,例如[sender isSelected]

如果您查看UIControl中属性的声明,可以看到这一点,因为UIButton是UIControl的子类:

注意,它覆盖getter,指示用于实现所选属性的消息实际上是-setSelected:和-isSelected。不过,最后,这并不影响使用点表示法时访问属性的方式,它始终只是sender.selected


只有在查看使用方法调用的示例代码,然后使用属性实现时,这才真正重要。

wow。。。我在那里犯了多么愚蠢的错误。。。非常感谢我的朋友,你不辞辛劳地指出了这样一个愚蠢的错误@这并不像你想象的那么罕见,我也不会说它愚蠢。问题源于方法选择器模式和属性之间的差异,当混合使用它们或使用较旧的教程时,可能会让人困惑。@gaige是对的,一开始就让人困惑。真的很好的解释@shem:我认为gaige的回答对像我这样的新手来说更具信息性。你的答案已经被投了更多的票,所以我接受他的答案。希望你不介意。再次感谢你们两位!实际上它应该是sender.selected=!发送者。已选择;该属性有一个getter属性,但我认为您可能也可以使用普通的getter而不是getter属性版本,这对我来说似乎是错误的,但您就这样做了。哇。。。我在那里犯了多么愚蠢的错误。。。非常感谢我的朋友,你不辞辛劳地指出了这样一个愚蠢的错误@这并不像你想象的那么罕见,我也不会说它愚蠢。问题源于方法选择器模式和属性之间的差异,当混合使用它们或使用较旧的教程时,可能会让人困惑。@gaige是对的,一开始就让人困惑。真的很好的解释@shem:我认为gaige的回答对像我这样的新手来说更具信息性。你的答案已经被投了更多的票,所以我接受他的答案。希望你不介意。再次感谢你们两位!实际上它应该是sender.selected=!发送者。已选择;该属性有一个getter属性,但是我认为您也可以使用普通的getter,而不是getter属性版本
我觉得我错了,但你看,哇!这是非常具有信息性的非常感谢您讲述默认getter!哇!这是非常具有信息性的非常感谢您讲述默认getter!
#import "CardGameViewController.h"

@interface CardGameViewController ()

@end

@implementation CardGameViewController

- (IBAction)flipCard:(UIButton *)sender
{
    sender.isSelected  = !sender.isSelected;
}

@end
- (IBAction)flipCard:(UIButton *)sender
{
    sender.selected  = !sender.selected;
}
@property(nonatomic, getter=isSelected) BOOL selected