もう少しフィルタの実装を見せてください。プロパティが設定されない原因となるものがたくさんある可能性があります。最も顕著なのは、あなたのパブリックインターフェイスにないということです。
@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
プロパティを使用する代わりにアイバーズにアクセスすると、直接あなたが書かなければならないメモリMGMTコードの量を減らし、必要に応じてオブジェクトを共同で/ wのアイバーズを交換する機能を提供します。私は通常、暗黙のうちに仮定されているので、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を削除し、プロパティのみを処理します。
virtualRoomSetはどこに定義されていますか? – rooftop
名前やvirtualRoomSetが誤植ですか? –
'filter'を初期化しましたか? –