2013-03-29 2 views
2

У меня есть приложение, которое создает постоянное хранилище в приложении: didFinishLaunchingWithOptions. Добавление магазина, по-видимому, может занять слишком много времени, что приводит к тому, что iOS завершает работу приложения до его завершения. Как добавить магазин в координатор от основного потока? Любые примеры? stackoverflow linkПриложение Core Data не удалось запустить вовремя

Версия ОС: IOS 6.1.3 (10B329) Версия отчета: 104

Тип исключения: 00000020 Исключительные коды: 0x000000008badf00d Выделенные темы: 0

Application Specific Информация: ком. maksanzhi.person не удалось запустить вовремя

Истекшее общее время процессора (в секундах): 13.470 (пользователь 13.470, система 0.000), 22% CPU истекшее время применения процессора (в секундах): 0,343, 1% CPU

Поток 0 Имя: очереди отправки: com.apple.main-нить резьбы 0:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 

if (_persistentStoreCoordinator != nil) { 
    return _persistentStoreCoordinator; 
} 

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"COOLPERSONS.sqldata"]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if (![fileManager fileExistsAtPath:[storeURL path]]) { 

    NSURL *defaultStoreURL = [[NSBundle mainBundle] URLForResource:@"COOLPERSONS" withExtension:@"sqldata"]; 
    if (defaultStoreURL) { 
     [fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL]; 
     [self addSkipBackupAttributeToItemAtURL:storeURL]; 
    } 
} 


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; 



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

UINavigationController *nav = (UINavigationController *)self.window.rootViewController; 
MainViewController *cvtc = (MainViewController *)[[nav viewControllers]objectAtIndex:0]; 
cvtc.managedObjectContext = self.managedObjectContext; 
[self setAppereance]; 
return YES; 

}

+0

Просто создание магазина обычно занимает много времени. Можете ли вы показать нам весь ваш код запуска? Возможно, профилировщик будет вам полезен при определении времени, в которое вы едите. –

+0

Я отредактировал вопрос с дополнительной информацией. – Astakhoff

ответ

3

как общие совет вы не должны создавать ничего тяжелого в методе applicationDidFinishLaunching. Постоянный хранилище основных данных не является тяжелым для создания, но в функции может быть из-за процесса миграции. Чтобы быть уверенным, что это постоянный магазин, а не что-то еще, попробуйте прокомментировать эту часть кода. Вы инициализируете хранилище данными?

+0

Да, я инициализирую хранилище данными. Могу ли я отправить или поделиться своим кодом? – Astakhoff

+2

Точка зрения. Вы не должны этого делать. Лучше показать контроллер модального представления с помощью счетчика из контроллера корневого представления и инициализировать здесь. applicationDidFinishLaunching должен как можно скорее вернуться. Мне не нужен код, я почти уверен, что этот ход находится здесь. – Andrea

+0

Большое спасибо, Андреа, я новый iOS Dev. Как показать modal view controller с spinner? – Astakhoff

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