1

我是新手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

这是我的CardGameViewController.m文件:

#import "CardGameViewController.h"

@interface CardGameViewController ()

@end

@implementation CardGameViewController

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

@end

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

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

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

有人可以帮我解决这个问题吗?提前致谢!

4

2 回答 2

4

它是selected而不是isSelected

- (IBAction)flipCard:(UIButton *)sender
{
    sender.selected  = !sender.selected;
}
于 2013-06-16T14:00:16.987 回答
4

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

在这种情况下,正如@shem 指出的那样,您要查找的属性是selected,即使它在 API 中公开,就-isSelected好像您要向它发送消息一样,例如[sender isSelected].

如果您查看以下属性的声明UIControl(作为UIButton的子类UIControl),您可以看到这一点:

@property(nonatomic, getter=isSelected) BOOL selected

请注意,它覆盖了getter,表示用于实现该selected属性的消息实际上是-setSelected:and -isSelected。最后,尽管如此,这不会影响您在使用点表示法时访问属性的方式,它始终只是sender.selected.

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

于 2013-06-16T14:12:01.943 回答