Покажите немного больше о вашей реализации фильтра. Там может быть куча вещей, в результате чего свойство не будет установлено. В частности, тот факт, что это не в вашем общедоступном интерфейсе.
@interface Filter : NSObject
@property (nonatomic, assign) BOOL name;
@property (nonatomic, assign) BOOL virtualRoomSet;
@end
Помещение этого там не будет иметь никакого значения, но это должно прояснить намерение объекта. Что касается реализации вашего контроллера:
#import "Filter.h"
@implementation NavigationController
@property (nonatomic, retain) Filter *filter;
@end
@implementation NavigationController
@synthesize filter;
//assuming you've properly alloced in init...
-(void) dealloc
{
[filter release];
[super dealloc];
}
- (IBAction)setVirtualShowProperty:(UISwitch*)sender {
self.filter.virtualRoomSet = YES; //better syntax as dealing directly w/ iVars is error prone
}
@end
Использование свойств вместо доступа к iVars напрямую уменьшает объем памяти, которую вы должны написать, и предоставляет возможность замены iVars с взаимодействующими объектами по мере необходимости. Я обычно избегаю объявлять iVars все вместе, так как они теперь предполагаются неявно. Это отвлекает вас от "@synthesize myVar = _myVar;" уродство.
Если у вас есть что-то подобное в вашем фильтре:
@interface Filter : NSObject {
BOOL _virtualRoomSet;
}
@property (nonatomic, assign) BOOL name;
@property (nonatomic, assign) BOOL virtualRoomSet;
@end
И это в вашей реализации фильтра:
@implementation Filter
@synthesize filter;
//other code
@end
... это может объяснить ошибку, которая еще раз подчеркивает мою точку зрения о том, как избежать объявления iVars! Другими словами, убедитесь, что вы действительно устанавливаете то, что хотите установить. Неявный iVar теперь автоматически объявляется для всех свойств, начиная с iOS SDK 3.0 или, возможно, ранее. Правило большого пальца, убивайте iVars в своем коде и работайте только со свойствами.