EXC_BAD_ACCESS而[WKInterfaceTable setNumberOfRows:withRowType]

时间:2016-08-18 10:41:48

标签: objective-c multithreading watch-os-2 nsthread wkinterfacetable

我想使用代码的这一部分从后台线程更新表

 __block typeof(self.tableB) self_tableB = self.tableB;
    [lwc setBaseControllerCallback:^(int ndx) {
        __block typeof(ndx) ndx_t = ndx;
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            [self_tableB setNumberOfRows: 0 withRowType:TABLEELEMENT];
            [self_tableB setNumberOfRows: ndx_t withRowType:TABLEELEMENT];
        }];

    }];

,其中

^(int ndx) {
//...
}

是一个从后台线程(NSThread)调用的块,而lwc是我自定义后台线程类的一个实例。

要清除此方法,请调用: //线程内的代码     if(handlerBase_inner){     handlerBase_inner(NDX ++);     }

所以,在 [self_tableB setNumberOfRows: ndx_t withRowType:TABLEELEMENT]; 我可以看到EXC_BAD_ACCESS。为什么?什么是

1 个答案:

答案 0 :(得分:1)

我担心self_tableB。我不确定你是否想要强烈引用它,人为地保持它活着可能会导致它有一个悬挂指针回到它的代表。

__block __weak typeof(self.tableB) self_tableB = self.tableB;

添加弱注释可能会成功。