이 오류가 발생합니다 : 작업을 완료 할 수 없습니다. (코코아 오류 134140) * 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 앱 종료 중, 이유 : '지정된 영구 저장소를 찾을 수 없습니다.''지정한 영구 저장소를 찾을 수 없습니다.' CoreData의 오류
방금 내 데이터 모델의 새 버전으로 변경되었습니다. 그러나 데이터 모델의 이전 버전을 활성화하면 응용 프로그램이 제대로 작동합니다. 새 버전을 활성화하면 해당 오류가 발생합니다. 내가 만든 유일한 변화는 자동 마이그레이션 기능으로 처리 할 수 있어야하는 데이터 모델에서 모든 변수를 선택 사항이 아닌 것으로 만들었습니다. 왜 [파일 관리자 copyItemAtPath : defaultStorePath toPath : myPathDocs 오류 : & 오류]에 의해 던져 진 오류가없는 경우 영구 저장소를 찾을 수 없다고 나는 이해가 안됩니다.
내 기본 번들의 sqlite 파일이 데이터 모델의 이전 버전에서 왔지만 새 버전에서 제공되는 sqlite 파일이 없다는 사실과 관련이 있다고 생각됩니다. 그러나 자동 마이그레이션은 새 모델에 대한 새 파일을 자체적으로 생성하고 (?) 기존 파일의 데이터를 기존 모델로 마이그레이션합니다. 잘못인가?
내 IOS 응용 프로그램에서 내 리소스에있는 Formats.sqlite라는 파일이 있습니다. 새로 설치 한 후 시작시 응용 프로그램은 응용 프로그램의/Documents 폴더에 기존 Formats.sqlite가 있는지 확인합니다. 존재하지 않으면 주 번들의 복사본을 거기에 복사합니다. 내 모델의 새 버전을 만들기 전에이 모든 작업이 정상적으로 수행되었습니다. 여기에 내가 사용하는 코드가 있습니다 :
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
int count = [[persistentStoreCoordinator persistentStores] count];
if (persistentStoreCoordinator != nil && count) {
return persistentStoreCoordinator;
}
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPathDocs = [documentsDirectory stringByAppendingPathComponent:@"Formats.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = nil;
if (![fileManager fileExistsAtPath:myPathDocs]) {
NSLog(@"SQLite file not found, copying SQLITE file");
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Formats" ofType:@"sqlite"];
if (defaultStorePath) {
if(![fileManager copyItemAtPath:defaultStorePath toPath:myPathDocs error:&error]) {
NSLog(@"Error copying file at defaultStorePath to the documents path: %@",error);
}
}
}
storeURL = [NSURL fileURLWithPath:myPathDocs];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
if (persistentStoreCoordinator == nil) {
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
}
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{//my error code here}
그렇다면 "여기 내 오류 코드"라는 곳에 오류가 발생합니다. 이 문제를 해결하기 위해 무엇을해야합니까? 왜 이런 일이 일어나는 걸까요? 덧붙여 말하면, 콘솔은 마이그레이션을위한 모든 단계를 뱉어 내고 있지만 그렇게하려고하는 것처럼 보이지만 영구 저장소를 찾을 수는 없습니다. 왜 그 저장소를 찾을 수 없는지 이해하지 못합니다. 빌드 타겟에 추가되었습니다.
사람들이 이전 버전의 앱에서 업그레이드하면 데이터가 이전되고 모든 정보를 다시 입력하지 않아도되는지 확인하고 싶습니다. 감사!
감사합니다. 나는이 문제를 겪고 있었고 이것을 읽었습니다. 그것은 나를 구했다. 그렇다면 나는 그것을 쓴 사람이라는 것을 깨달았다. 헴. – CommaToast