删除SKNode内容并重新创建它会导致EXC_BAD_ACCESS

时间:2016-01-11 02:31:59

标签: objective-c xcode uitableview sprite-kit exc-bad-access

'我发现组合gulp-load-pluginsUITableView的困难的原因我决定开发一个自定义SpriteKit Framework(提供完整的滚动系统)。一切都运行得很好但我在解决更新过程中遇到的错误时遇到了严重的问题。

我的SKTableView按字母顺序向用户显示项目列表。由于我应该创建的棘手算法来更新此列表(在定义的位置添加一个单元格,刷新标题并向下滚动所有项目),我决定只更新数据库并重新加载列表(通过删除现有内容并重新创建它),同时向用户显示异步通知。

成功的应用程序重新加载列表一次,再次,然后经过一些随机更新...这里出现了混乱

问题

  • SKTableView方法中,应用程序崩溃了EXC_BAD_ACCESS
  • removeAllChildren语句(???)或其他语句中,应用程序崩溃时出现相同的错误
  • 应用程序崩溃,导致for错误。

调试

  • 控制台窗口不显示任何类型的信息。
  • 我无法使用'分配'来监控应用程序。或者'僵尸'仪器,因为它严重减慢了应用程序。在jet_context::set_fragment_texture...方法中,甚至加载SKTableView需要2分钟以上。

代码

接口

init

初始化

/** Container for all the table items. */
@property (nonatomic, readonly) SKNode *nodeContainer;

填充表格

- (instancetype)init
{
    if (self = [super init]) {
        ...
        Create the style of the SKNode
        ...

        // Container initialization
        _nodeContainer              = [[SKNode alloc] init];
        _nodeContainer.position     = CGPointZero;
        _nodeContainer.zPosition    = 0;

        [self addChild:_nodeContainer];

        // Generate the content
        [self generateContent];
    }
    return self;
}

重新加载内容

- (void)generateContent
{
    // Checks if the node exists, if it does, remove all of its children
    // Note: used for the recreation of the list
    if (_nodeContainer != nil)
        [_nodeContainer removeAllChildren];

    ...
    Initializes several SKSpriteNode and SKLabelNode
    ...

    [_nodeContainer addChild:imgItem];
    [_nodeContainer addChild:labelItem];
}

我真的无法弄清楚发生了什么。代码在没有逻辑的情况下在不同的行中超时崩溃。我的意思是,这是删除和重新创建项目的正确方法吗?有什么建议吗?

0 个答案:

没有答案