Node を基本クラスとするツリーベースのデータ構造があります。
@interface Node : NSObject
@property (nonatomic, weak) Node *parentNode;
@property (nonatomic, assign) BOOL detached;
@end
親のノードの切り離された変数が YES の場合、子の同じプロパティが YES になる必要があります。この動作は、次のコードでモデル化されています。
@implementation Node
- (void)setParentNode:(Node *)parentNode {
_parentNode = parentNode;
RAC(self, detached) = [RACObserve(_parentNode, detached) filter:^BOOL(id value) {
return [value boolValue];
}];
}
@end
親が変更されているときに、切り離されたプロパティを再バインドするにはどうすればよいですか? その場合、何もしないとクラッシュします。
Node *node = [Node new];
Node *parentNode = [Node new];
Node *grandparentNode = [Node new];
parentNode.parentNode = grandparentNode;
node.parentNode = parentNode;
[RACObserve(node, detached) subscribeNext:^(id x) {
NSLog(@"node.detached: %@", x);
}];
Node *newParent = [Node new];
node.parentNode = newParent;
grandparentNode.detached = YES;
ここで議論を見つけましたが、私の場合に解決策を採用する方法を理解できません。