Миграция основных данных в фоновом потоке завершается с ошибкой при запуске в качестве UIBackgroundTask - PullRequest
1 голос
/ 25 января 2012

Мой код:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        @autoreleasepool {            
            // Now on a background thread

            // Setup background task
            __block UIBackgroundTaskIdentifier bgTask;

            void (^finishBackgroundTask)(void) = ^(void) {
                [[UIApplication sharedApplication] endBackgroundTask:bgTask];
                bgTask = UIBackgroundTaskInvalid;
            };

            // Start background task
            bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:finishBackgroundTask];

            // The method below migrates a core data database and takes ages
            [MyClass migrateCoreDataStuff];

            finishBackgroundTask();
        }
    });

Я получаю ошибку: NSUnderlyingException = "Fatal error. The database at /var/mobile/Applications/55B83D5F-CCF5-438E-BECA-B97DB5505541/Documents/Blah.sqlite is corrupted. SQLite error code:11, 'database disk image is malformed'";

Ошибка миграции возникает, только когда выполняются следующие условия: * миграция в фоновом потоке * миграцияработает как UIBackgroundTask * Я работаю на устройстве, а не на симуляторе

Я использую iOS 4.3.5, сборка для iOS 4.0.

1 Ответ

0 голосов
/ 25 января 2012

Не видя содержимого migrateCoreDataStuff, трудно понять точную проблему.Однако Core Data на неосновных потоках - сложная задача.Прочитайте http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/CoreData/Articles/cdConcurrency.html. Возможно, вам понадобится как минимум отдельный контекст управляемого объекта для нового потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...