이전에는 핵심 데이터를 사용하는 앱이 있습니다. 동일한 저장소 URL을 사용하여 NSManagedObjectModel을 초기화하고 NSPersistentStoreCoordinator를 만듭니다. 그러나, 새로운 애플 리케이션에서, 나는 같은 방식으로 사용하려고, 모델을 만들 수 없습니다. 그래서 NSManagedObjectModel을 만들려면 모델 URL (이 포럼에서 찾았습니다)을 사용해야합니다. 이슈가 뭐야? 여기핵심 데이터 모델 경로 vs 저장 경로
- (NSString *)storeName
{
return @"ABC.storedata";
}
- (NSURL *)storeUrl
{
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:self.storeName];
return storeURL;
}
- (NSManagedObjectModel *)managedObjectModel {
if (_managedObjectModel == nil) {
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[self storeUrl]];
}
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self storeUrl] options:nil error:&error]) {
abort();
}
return _persistentStoreCoordinator;
}
NEW 응용 프로그램에서입니다 : 여기
는 OLD 응용 프로그램에서입니다 그들은 매우 다른 두 가지이기 때문에- (NSString *)storeName
{
return @"DEF.sqlite";
}
- (NSURL *)storeUrl
{
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:self.storeName];
return storeURL;
}
- (NSURL *)modelUrl
{
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DEF" withExtension:@"momd"];
return modelURL;
}
- (NSManagedObjectModel *)managedObjectModel {
if (_managedObjectModel == nil) {
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[self modelUrl]];
}
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self storeUrl] options:nil error:&error]) {
abort();
}
return _persistentStoreCoordinator;
}
오케이. 당신 말이 맞아요. OLD 앱이 작동하는 이유가 있습니다. OLD 앱은 initWithContentsOfURL이 아닌 mergedModelFromBundles를 사용합니다. – angelokh