Random EXC _BAD _ДОСТУП с помощью persistStoreCoordinator

Время от времени мое приложение падает до полной загрузки прямо в следующей строке:

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. Обратите внимание, что в моем коде нет явных блокировок.

7
задан Pieter 1 May 2012 в 09:42
поделиться