2014-04-09 60 views
-2

在xcode中我注意到有一种方法在使用属性时自动创建。Setter方法问题

-(void)setSelected:(BOOL)selected {} 

现在我真的不知道这是什么所谓:

例如,如果我在@interface进入@property(nonatomic)BOOL selected;的方法获取可在@implementation使用看起来像这样的背景下产生但我认为它被称为setter方法,现在我想我可以在设置selected boolean时使用它,但是当我调用它时它是空的;没有任何反应,甚至没有selected被分配一个值,而当我进入:

self.selected = selected; 

它运行到一个无限循环和应用程序崩溃,有一种简单的方法来燮说无限循环或者我不应该使用这些种方法?

FIXED

我合成self.selected,现在它不循环。

@synthesize selected; 

-(void)setSelected:(BOOL)selected_ { 
    selected = selected_; 
} 
+0

虽然驱动器倒推! – Arbitur

回答

3

您需要访问后盾IVAR为selected财产的setter

-(void)setSelected:(BOOL)selected { if (_selected != selected) { _selected = selected; } }

分配self.selected = selected将调用二传手,并调用这个设置里面将导致死循环!

+0

我综合了self.selected,现在它工作,即使没有if语句:) – Arbitur

+0

@Arbitur你不应该需要合成属性作为属性声明做到这一点。 如果值没有改变,'if'语句就不会不必要的设置。 – Rich

+0

好吧,我已经用if语句试过了,奇怪的是它没有工作。但综合做了诀窍;)你的选择让我想起它。我通常不合成x) – Arbitur