У меня есть подкласс NSOperation
, который выполняет операции асинхронного действия с UITableView
.Отменено NSOperation EXC_BAD_ACCESS сбой при настройке isFinished
Я отменяю правильные методы начать и закончить так:
- (void)start
{
[self willChangeValueForKey:@"isExecuting"];
self.isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
if (self.isCancelled)
{
[self finish];
return;
}
}
- (void)finish
{
if (!_isExecuting)
{
[self willChangeValueForKey:@"isExecuting"];
_isExecuting = YES;
[self didChangeValueForKey:@"isExecuting"];
}
[self willChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
_isExecuting = NO;
_isFinished = YES;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];
}
У меня есть проблема, это если я прокрутить таблицу и удалить строку, это вызывает cancel
метод на операции, однако, как операции постепенно завершаются, и он идет дальше по таблице, он падает с ошибкой EXC_BAD_ACCESS
на линии [self didChangeValueForKey:@"isFinished"];
Код довольно сложный, чтобы вставить все это здесь, но я хотел бы знать, как я могу отслеживать вниз, какой объект вызывает сообщение KVO?
Если я включаю объекты зомби в отладчик, он просто не сбой вообще без предупреждений, которые не помогают.
Если я обертываю методы KVO в try/catch
, он никогда не попадает и все еще падает.
Я попытался переопределение методов КВО в моем NSOperation
подкласса, но они никогда не называют:
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
{
NSLog(@"%s - %@", __PRETTY_FUNCTION__, observer);
[super addObserver:observer forKeyPath:keyPath options:options context:context];
}
Можно ли видеть, кто наблюдатели?
Вы нашли ответ на эту проблему, не помните? –