Я использую Xcode 5.02 и iOS 7.04, и я долго и долго искал эту неприятную ошибку, и после многих часов отладки я все еще не могу раздавить эту ошибку.Сообщение отправлено на освобожденный экземпляр ОЧЕНЬ ОШИБКА WEIRD
Поэтому я использую класс UIManagedDocument Helper для того, чтобы получить мои данные
+ (void)openDocument:(NSArray *)documentData {
NSString *documentName = documentData[0];
CompletionBlock completionBlock = documentData[1];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] lastObject];
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url];
void (^OnDocumentDidLoad)(BOOL) = ^(BOOL success) {
completionBlock(document);
preparingDocument = NO;
};
if(!preparingDocument){
preparingDocument = YES;
if(!([fileManager fileExistsAtPath:[url path]])){
[document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForCreating
completionHandler:OnDocumentDidLoad];
} else if(document.documentState == UIDocumentStateClosed){
[document openWithCompletionHandler:OnDocumentDidLoad];
} else if (document.documentState == UIDocumentStateNormal) {
OnDocumentDidLoad(YES);
}
} else {
//Try till Document is Ready
[self performSelector:@selector(openDocument:)
withObject:documentData
afterDelay:0.5];
}
}
На мой взгляд контроллера, я использую этот вспомогательный класс для того, чтобы получить доступ к моему ManagedObjectContext
- (void)updateContext{
[DocumentHelper openDocument:@[DOCUMENT_NAME, ^(UIManagedDocument *document) {
self.managedObjectContext = document.managedObjectContext;
}]];
}
И этот метод updateContext вызывается обычно после обновления CoreData, например добавления или удаления новых элементов, однако этот метод также вызывается в методе (void) viewWillAppear и в блоке уведомлений, когда приложение находится на переднем плане (с использованием приложения ция Делегат)
Всякий раз, когда я положил приложение в фоновом режиме и открыть приложение, сбой приложения не говоря
*** -[UIManagedDocument _setInConflict:]: message sent to deallocated instance 0x1701b0ae0
Я использовал таНос и NSZombie Профиль менеджера, но независимо от того, что эта ошибка напоминает тиканье бомба замедленного действия. Ошибка возникает при случайном числе раз закрытия и повторного открытия приложения.
Это код ARC правильно? Можете ли вы показать, как вы определяете свои свойства? –
Да, это код ARC @property (неатомный, сильный) NSManagedObjectContext * managedObjectContext; – liquidfired
Вы уверены, что используете Xcode 5.0.2 и iOS 7.0.4? –