2014-01-24 4 views
0

Я использую настраиваемый набор для свойства bool, так как мне нужно сделать дополнительную работу, когда это значение изменится. Вот моя реализация:Пользовательский сеттер не получает вызов в UIView

MyView.h

@interface MyView : UIView 

@property (nonatomic) BOOL isSelected; 

@end 

MyView.m

@implementation MyView 

@synthesize isSelected; 

-(void)setIsSelected:(BOOL)_isSelected 
{ 
    self.isSelected = _isSelected; 

    //Custom code that changes UI based on bool state 


} 

@end 

Однако сеттер не вызывался! Может кто-нибудь сказать мне, почему?

+0

Как установить свойство, когда вы ожидали ваш метод установки будет называться? Подробнее .... вы не можете установить свойство с помощью точечной нотации в методе setter. – KudoCC

+0

В том же классе я иду ... isSelected = YES; – gigahari

+0

Вы должны сделать 'self.isSelected = YES;' – KudoCC

ответ

4

Вызов вызываются двумя способами настройки вашего свойства и метода сеттера.

1, Dot Синтаксис: self.isSelected = YES; 2, назовите его напрямую. [set setIsSelected: YES];

@interface MyView : UIView 
@property (nonatomic) BOOL isSelected; 
@end 

@implementation MyView 
@synthesize isSelected; 
-(void)setIsSelected:(BOOL)_isSelected 
{ 
    isSelected = _isSelected; 
    //Custom code that changes UI based on bool state 
} 
@end 

Ваш сбой приложения, потому что вы звоните self.isSelected = _isSelected в методе сеттер, он не будет вызывать метод установки рекурсивно и бесконечно, пока стек над потоком!

+0

Спасибо, это исправляет! Думаю, я могу спросить об этом в следующем интервью iOS! :-) – gigahari

0

Попробуйте изменить аргумент -(void)setIsSelected: метода, _isSelected к некоторой другой переменной сказать selected и использовать его, чтобы присвоить свойство, как _isSelected = selected; в методе.

+0

Я сделал это. Это приводит к сбою приложения в сеттере с EXC_BAD_ACCESS – gigahari

+0

. Я отредактировал ответ. Попробуйте. –

1

например. в viewDidLoad значение self.isSelected=YES; или где вы хотите установить это значение.

Ваш метод сеттер должен выглядеть так:

-(void)setIsSelected:(BOOL)seleted 
{ 
    _isSelected = seleted; 

    //Custom code that changes UI based on bool state 


} 

Это "сеттер цикл" если вы в инкубаторе использовать этот код: self.isSelected = _isSelected;

+1

Спасибо, это исправляет! Думаю, я могу спросить об этом в следующем интервью iOS! :-) – gigahari

0

Попробуйте это,


//in myView.h 
    @interface customView : UIView 
    { 

    } 
    @property(nonatomic)BOOL *isSelected; 
    @end 


в myView.m файле


@implementation customView 
    @synthesize isSelected = _isSelected; 


    - (void)setIsSelected:(BOOL *)inSelected //inSelected is the in coming value for bool 
    { 
     _isSelected = inSelected; 
     NSLog(@"setter is called"); 
    }