Время от времени мое приложение падает до полной загрузки прямо в следующей строке:
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
Полный метод, в котором находится это состояние if, выглядит как следует (Я думаю, что это довольно стандартно):
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil) {
return __persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
Обновление
Сбой происходит при втором вызове метода -(NSPersistentStoreCoordinator *)persistentStoreCoordinator
. РЕДАКТИРОВАТЬ Первый раз он вызывается из первого видимого viewController:
- (void)updateStats {
NSLog(@"Updating stats");
dispatch_queue_t request_queue = dispatch_queue_create("updateNumberOfSchedules", NULL);
dispatch_async(request_queue, ^{
AppDelegate *theDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
...
});
}
Второй раз (, когда иногда происходит сбой, когда мой класс DeviceLinker собирается проверить базу данных на наличие неактивных ссылок в моем методе checkInactiveLinks. Этот метод вызывается при запуске в applicationDidBecomeActive
:
-(void) checkInactiveLinks {
AppDelegate *theDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
[newMoc setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
...
}
. Поправьте меня, если я ошибаюсь, но, читая мой код, я думаю, что при втором вызове метода получения persistenceStoreCoordinator он должен возвращать __PermanentStoreCoordinator, а не выделять и инициировать новый...
ОБНОВЛЕНИЕ 2 В той же самой строке в операторе if я тоже время от времени получаю это:
-[__NSCFDictionary _hasPrecomputedKeyOrder]: unrecognized selector sent to instance 0x7dd3770
ОБНОВЛЕНИЕ 3
Я отредактировал свою схему сборки и включил зомби и журнал исключений на вкладке диагностики. Теперь я вижу -[NSPersistentStoreCoordinator unlock]: message sent to deallocated instance 0x8916090
. Обратите внимание, что в моем коде нет явных блокировок.