0

Я использую 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 Профиль менеджера, но независимо от того, что эта ошибка напоминает тиканье бомба замедленного действия. Ошибка возникает при случайном числе раз закрытия и повторного открытия приложения.

+1

Это код ARC правильно? Можете ли вы показать, как вы определяете свои свойства? –

+0

Да, это код ARC @property (неатомный, сильный) NSManagedObjectContext * managedObjectContext; – liquidfired

+0

Вы уверены, что используете Xcode 5.0.2 и iOS 7.0.4? –

ответ

2

У меня возникла такая же проблема сегодня.

* - [UIManagedDocument _setInConflict]: сообщение, отправленное высвобождены например 0x1701b0ae0

Это сообщение указывает на то, что ваш UIManagedDocument экземпляр был освобожден, но имеющий сообщение, отправленное на него. Я решил проблему в своем проекте, объявив переменную документа как переменную уровня файла (вне метода), чтобы она не была слишком-торопливо выпущена и только установила ее на нуль после того, как я закончил ее использование.

EDIT ответить на вопрос: Мое приложение проверяет и обновляет документы iCloud в делегате приложения. В моем файле AppDelegate.h, у меня есть это:

@interface CSPAppDelegate : UIResponder <UIApplicationDelegate> { 
    BOOL iCloudAvailable; 
    NSMetadataQuery *_query; 
    CSPICloudDocument *doc; // <<< declare document variable here instead of in method 
} 

Документ конкретизируется в соответствующем методе. Единственное реальное различие между вашим кодом и тем, что я делаю, - это то, где я объявила переменную. Этого было достаточно, чтобы решить ту же ошибку для меня.

+0

Не могли бы вы показать пример кода? – liquidfired

+0

Код добавлен в ответ. –

+0

Большое вам спасибо! Это сработало! Кроме того, поскольку я использовал метод класса, я создал статический Документ вместо свойства. – liquidfired

 Смежные вопросы

  • Нет связанных вопросов^_^