2013-03-29 2 views
2

애플리케이션 : didFinishLaunchingWithOptions에 영구 저장소를 만드는 앱이 있습니다. 스토어를 추가하는 데 너무 오래 걸릴 수 있으므로 iOS가 출시를 완료하기 전에 앱을 종료하게됩니다. 메인 스레드에서 코디네이터에 저장소를 추가하는 방법은 무엇입니까? 어떤예요? stackoverflow link핵심 데이터 앱이 시간에 시작하지 못했습니다.

OS 버전 : 아이폰 OS 6.1.3 (10B329) 보고서 버전 : 104

예외 유형 : 00000020 예외 코드 : 0x000000008badf00d 강조 스레드 : 0

응용 프로그램 특정 정보 : 닷컴. maksanzhi.person이 시간에 시작하지 못했습니다.

경과 된 총 CPU 시간 (초) : 13.470 (사용자 13.470, 시스템 0.000), CPU 22 %,363,210 경과 어플리케이션 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

advice 당신은 applicationDidFinishLaunching 메소드에서 아무 것도 만들지 말아야한다. 코어 데이터 영구 저장소는 작성하는 데 많은 비용이 들지 않지만 마이그레이션 프로세스로 인해이 기능에있을 수 있습니다. 그것이 영구 저장소인지 확인하고 다른 부분이 아닌지 확인하려면 코드의 해당 부분을 주석 처리하십시오. 상점에 데이터를 초기화 하시겠습니까?

+0

예, 데이터로 상점을 초기화합니다. 내 코드를 보내거나 공유 할 수 있습니까? – Astakhoff

+2

그게 핵심입니다. 여기에서해서는 안됩니다. 루트보기 컨트롤러에서 회 전자와 함께 모달보기 컨트롤러를 표시하고 여기에서 초기화하는 것이 좋습니다. applicationDidFinishLaunching은 가능한 한 빨리 반환해야합니다. 나는 당신이 코드를 필요로하지 않는다, 나는 그 proble이 여기에 있다고 확신한다. – Andrea

+0

대단히 감사합니다. Andrea, 저는 새로운 iOS Dev입니다. 회 전자와 함께 모달보기 컨트롤러를 표시하는 방법을 알려주십시오. – Astakhoff

관련 문제