EXC_BAD_ACCESS 而 [WKInterfaceTable setNumberOfRows:withRowType]
EXC_BAD_ACCESS while [WKInterfaceTable setNumberOfRows:withRowType]
我想使用这部分代码从后台线程更新 table
__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 - 是我的自定义后台线程的一个实例 class。
清除此方法的方法如下:
//线程内代码
如果(handlerBase_inner){
handlerBase_inner(ndx++);
}
所以,在
[self_tableB setNumberOfRows: ndx_t withRowType:TABLEELEMENT];
我可以看到 EXC_BAD_ACCESS
。为什么?什么是
我担心 self_tableB。我不确定您是否需要对它的强引用,人为地使其保持活动状态可能会导致它有一个指向其委托的悬空指针。
__block __weak typeof(self.tableB) self_tableB = self.tableB;
添加一个弱注释可能会达到目的。
我想使用这部分代码从后台线程更新 table
__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 - 是我的自定义后台线程的一个实例 class。
清除此方法的方法如下: //线程内代码 如果(handlerBase_inner){ handlerBase_inner(ndx++); }
所以,在
[self_tableB setNumberOfRows: ndx_t withRowType:TABLEELEMENT];
我可以看到 EXC_BAD_ACCESS
。为什么?什么是
我担心 self_tableB。我不确定您是否需要对它的强引用,人为地使其保持活动状态可能会导致它有一个指向其委托的悬空指针。
__block __weak typeof(self.tableB) self_tableB = self.tableB;
添加一个弱注释可能会达到目的。