Я преобразовал свой проект в ARC, и когда я достиг некоторых подклассов NSOperation
, ответственных за загрузку некоторых изображений в фоновом режиме, код начал сбой.NSManagedObject crashing on NSOperation (ARC)
Так у меня NSOperation
подкласса и его основной код:
- (void)main
{
Post *p = [[Post alloc] initWithNewManagedObjectContext];
Post *post = (Post *)[p findById:postId];
[post downloadAndProcessImageOfTypeThumbOrAll:thumbOrAll];
if (![self isCancelled]) {
[target performSelectorOnMainThread:afterCompletionAction withObject:postId waitUntilDone:NO];
}
}
код работает при компиляции без ARC (и с соответствующими выпусками), но когда он преобразуется в АРК он получил EXC_BAD_ACCESS Исключение сразу после завершения основного метода.
Я думаю, что это связано с ARC, выпуская любой объект, прежде чем он должен, возможно, объекты Posts. Но я не знаю, как сохранить их дольше.
Кроме того, [[Post alloc] initWithNewManagedObjectContext];
создает или повторно использует существующий контекст для доступа к объекту из CoreData.
Любые подсказки?
Run инструментов с 'NSZombiesEnabled'. Это очень помогает в решении этих проблем. – borrrden
Что такое цель? Вы держите ссылку на нее? Если у вас нет сильной ссылки, он будет немедленно освобожден, прежде чем 'executeSelectorOnMainThread:' может запускаться ... Это означает, что вы будете отправлять сообщение на освобожденный объект. – nielsbot
'post' также будет освобожден, если у вас нет ссылки на него в другом месте. – nielsbot