2017-02-22 4 views
1

タイトルは正確な問題を説明しています。基本的なCoreDataマスター詳細テンプレートは、iOS 10以上でのみ動作します。しかし、iOS 9またはそれ以降で同じテンプレートを実行しようとすると、を取得していたpersistentContainerが作成されていないため、クラッシュする可能性があります。これは、最新のiOS 10にxCode 8が追加されたためです。Swiftの回避策はほとんどありませんが、Objective-Cの回避策はほとんどありませんでした。 Objcのためのより良い解決策?Xcode 8自動生成コアデータスタックはiOS 9以降ではサポートされていません

答えて

1

からスタックコピーして、上記のデリゲートクラスの任意の場所にこの方法を置く

が、これは我々がやっているものです、あなたはこのように自分でコアデータスタックを初期化する必要があり、基本的 persistentContainerインフラを持っていないiOSの10 persistentContainer introductする前にイオン。今すぐ下記入れ

- (void)initializeCoreData 
{ 

    NSDictionary *options = @{ NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}}; 

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"yourmodelname" withExtension:@"momd"]; 
    NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    NSAssert(mom != nil, @"Error initializing Managed Object Model"); 

    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; 
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
    [moc setPersistentStoreCoordinator:psc]; 
    _managedObjectContext = moc; 
    [EFLDatabase sharedDatabaseWithManagedObjectContext:_managedObjectContext]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSURL *documentsURL = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
    NSLog(@"DOC %@", [documentsURL absoluteString]); 
    NSURL *storeURL = [documentsURL URLByAppendingPathComponent:@"yourmodelname.sqlite"]; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 
     NSError *error = nil; 
     NSPersistentStoreCoordinator *psc = [[self managedObjectContext] persistentStoreCoordinator]; 
     NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]; 
     NSAssert(store != nil, @"Error initializing PSC: %@\n%@", [error localizedDescription], [error userInfo]); 
    }); 
} 

が10以下の場合は、基本的にはiOSのバージョンを確認しますdidFinishLaunchingWithOptions方法にスニペット、その後、返信用

if ([[NSProcessInfo processInfo] operatingSystemVersion].majorVersion < 10) { 
     [self initializeCoreData]; 
} 
0

ダウンロードXcodeの7は、iOSの9であるので、

をテンプレートからプロジェクトを作成し、 使用のコアデータをチェックして、解決策があるコアデータは、ここでアプリの委任

+0

感謝を上記の方法を実行します。私はすでにそれを試したが、残念ながらそれは私のために働いていない。 –

+0

"それは私のために働いていない"と言うとき、正確に何が問題なのですか? –

+0

まあ、コンテキストの作成を進めるには、自動的に 'managedObjectContext'メソッドを呼び出さなかったのです。 –

関連する問題