Исключение:Почему -reoveFromParent в SKNode бросает это исключение?
- [__ NSArrayI removeExactObject]: непризнанные селектор направлен например
Я хочу, чтобы иметь представление SKScene
в NSTreeController
, для этого я использую Proxy
, который содержит ссылки на SKNode
и его прокси-дочерние элементы, каждый из которых содержит класс Proxy
, который в свою очередь используется в качестве представленного объекта в контроллере дерева.
NSTreeController
|-Proxy -> SKScene
|-Proxy -> |-SKSpriteNode
|-Proxy -> |-SKNode
|-Proxy -> |-SKSpriteNode
|-Proxy -> |-SKShapeNode
Все узлы добавляются или удаляются на сцену с помощью этих методов в классе Proxy
@interface Proxy : NSObject
+ (instancetype)proxyWithNode:(id)node;
@end
@implementation Proxy {
SKNode *_node;
NSMutableArray *_proxyChildren;
}
+ (instancetype)proxyWithNode:(id)node {
if (node) {
Proxy *proxy = [[Proxy alloc] init];
proxy.node = node;
return proxy;
}
return nil;
}
- (void)setNode:(id)node {
_proxyChildren = [NSMutableArray array];
for (id child in [node children]) {
Proxy *childProxy = [Proxy proxyWithNode:child];
[_proxyChildren addObject:childProxy];
}
_node = node;
}
- (id)node {
return _node;
}
- (void)setChildren:(NSMutableArray *)children {
//[_node removeAllChildren];
[self cleanUpChildren:_node];
for (Proxy *child in children) {
[_node addChild:child.node];
}
_proxyChildren = children;
}
- (NSMutableArray *)children {
return _proxyChildren;
}
- (void)cleanUpChildren:(SKNode *)node {
for (SKNode *child in node.children) {
[self cleanUpChildren:child];
//assert(child.parent == node);
@try {
//NSLog(@"\n%p %p\n%@\n%@\n\n", node, child, node, child);
[child removeFromParent];
}
@catch (NSException *exception) {
NSLog(@"WTF!");
}
}
}
@end
Это, как я заполнить контроллер дерева со сценой
[_treeController setContent:[Proxy proxyWithNode:scene]];
проблема в том, что в какой-то момент, когда древовидный контроллер пытается удалить прокси-узел из своего родителя, SKNode
выдает исключение выше
Это, как я удаление прокси-узел
[_treeController removeObjectAtArrangedObjectIndexPath:indexPath];