1

私はに慣れObjective-Cていません。実際、学習を始めてから数時間経ちました。

私は現在、iOS 開発に関するスタンフォード大学の最新の講義を見ています。2 番目の講義で 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私のビデオのプロパティで私が観察した違いの 1 つは、ビデオで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わずかに異なるメソッド パターンを使用することは珍しくありません。これにより、セッターは-set<property>:であり、 の代わりのゲッターがあります。-is<property>これは、プロパティまたは を介し​​てアクセスするときに混乱を引き起こす可能性がありますKVC

この場合、@shem が指摘しているように、探しているプロパティは です。ただし、APIにメッセージを送信するかのようselectedに API で公開されています。-isSelected[sender isSelected]

UIControl(UIButtonのサブクラスであるUIControl)のプロパティの宣言を調べると、これを確認できます。

@property(nonatomic, getter=isSelected) BOOL selected

をオーバーライドすることに注意してください。これgetterは、プロパティの実装に使用されるメッセージselectedが実際には-setSelected:およびであることを示しています-isSelected。ただし、最終的には、これはドット表記を使用するときにプロパティにアクセスする方法には影響しません。常にsender.selected.

これは、メソッド呼び出しを使用するサンプル コードを見て、プロパティを使用して実装する場合にのみ重要です。

于 2013-06-16T14:12:01.943 に答える