내 응용 프로그램에서 때로는 데이터베이스 파일을 다시 작성하고 다시 채워야합니다. SQLite databse는 CoreData 스택에 의해 생성되고 관리됩니다.coredata가 sqlite 데이터베이스 모델을 다시 작성하도록 강제하는 방법은 무엇입니까?
내가하려는 것은 파일을 삭제 한 다음 persistentStoreCoordinator 객체를 다시 생성하는 것입니다.
그것은 시뮬레이터에서 작동하지만 나는 그런 오류를 받고 있어요 장치에 :
NSFilePath = "/var/mobile/Applications/936C6CC7-423A-46F4-ADC0-7184EAB0CADD/Documents/MYDB.sqlite";
NSUnderlyingException = I/O error for database at /var/mobile/Applications/936C6CC7-423A-46F4-ADC0-7184EAB0CADD/Documents/MYDB.sqlite. SQLite error code:1, 'table ZXXXX already exists';
나는 어떤 식 으로든이의 원인을 찾을 수 없습니다. 두 가지 다른 문제를 나타냅니다 - 코코아 오류 256은 파일이 없거나 읽을 수 없음을 나타냅니다. 그러나 파일이 비어 있더라도 persistentStoreCoordinator를 생성 한 후 파일이 생성되지만 일부 쿼리를 실행 한 후에 사라집니다.
alredy 기존 테이블을 만들려고 시도하는 것을 나타내는 두 번째 메시지는이 경우 매우 이상합니다.
나는 꽤 혼란스럽고 여기서 무슨 일이 일어나는지 알 수 없다. 내 코드는 다음과 같습니다.
NSString *path = [[WLLocalService dataStorePath] relativePath];
NSError *error = nil;
WLLOG(@"About to remove file %@", path);
[[NSFileManager defaultManager] removeItemAtPath: path error: &error];
if (error != nil) {
WLLOG(@"Error removing the DB: %@", error);
}
[self persistentStoreCoordinator];
WLLOG(@"Rebuild DB result %d", [[NSFileManager defaultManager] fileExistsAtPath: path]);
이 코드를 실행 한 후에는 DB 파일이 있지만 비어 있습니다. 첫 번째 쿼리 (및 이후의 모든 쿼리)가 실행되면 위의 오류가 발생하고 파일이 사라집니다.
누구에게 잘못된 점이 있습니까?
올바른 방법을 알려 주셔서 대단히 감사합니다!
팁 주셔서 감사합니다. 흥미 롭습니다. 시도해 보겠습니다.그러나 NSPersistentStoreCoordinator의 모든 인스턴스가 파일이 제거되기 직전에 해제 될 때 동일하지 않습니까? 그것은 위의 메서드를 호출하기 바로 전에 발생합니다. 나는 모든 후속 데이터 구조를 제거하고 해제한다고 가정합니다. 파일 자체를 제거하기 전에 코디네이터에서 영구 저장소를 명시 적으로 제거하는 것이 중요한 이유를 설명 할 수 있습니까? – Burt
그래서 당신의 솔루션을 시도하고 그것을 작동합니다! 그 점에 큰 감사드립니다! 그러나 나는 아직도 영구 저장소를 제거하고 단순히 코디네이터를 해제하는 것의 차이점을 궁금해합니다. – Burt
'NSManagedObjectContext'에서'NSPersistentStoreCoordinator'를 nil로 설정하고 해제하면 동일한 작업을 수행 할 수는 있지만 단순히 'NSPersistentStoreCoordinator'에 저장소 삭제를 지시하는 것보다 훨씬 무거울 수 있습니다. –