Đó là điều hoàn toàn hợp lệ để làm nếu ứng dụng của bạn yêu cầu truy cập internet. Nếu không, người dùng có thể được để lại với một tập dữ liệu rỗng (bạn xóa cơ sở dữ liệu cũ khi bạn thấy nó không tương thích với mô hình hiện tại, nhưng bạn không thể điền lại nó mà không cần truy cập vào máy chủ).
Về mặt kỹ thuật, đó là một việc nhỏ nhặt cần làm. Khi bạn thiết lập các NSPersistentStoreCoordinator
:
NSURL *storeURL = ...;
NSManagedObjectModel *managedObjectModel = ...;
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel];
// Check if we already have a persistent store
if ([[NSFileManager defaultManager] fileExistsAtPath: [storeURL path]]) {
NSDictionary *existingPersistentStoreMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType: NSSQLiteStoreType URL: storeURL error: &error];
if (!existingPersistentStoreMetadata) {
// Something *really* bad has happened to the persistent store
[NSException raise: NSInternalInconsistencyException format: @"Failed to read metadata for persistent store %@: %@", storeURL, error];
}
if (![managedObjectModel isConfiguration: nil compatibleWithStoreMetadata: existingPersistentStoreMetadata]) {
if (![[NSFileManager defaultManager] removeItemAtURL: storeURL error: &error])
NSLog(@"*** Could not delete persistent store, %@", error);
} // else the existing persistent store is compatible with the current model - nice!
} // else no database file yet
[_persistentStoreCoordinator addPersistentStoreWithType: NSSQLiteStoreType
configuration: nil
URL: storeURL
options: nil
error: &error];
đang nhận được lỗi mã lỗi SQLite này: 11 , 'hình ảnh đĩa cơ sở dữ liệu không đúng định dạng' ở lần khởi chạy đầu tiên sau khi cập nhật. Nhưng khi ra mắt tiếp theo, nó không phải là một vấn đề như các tập tin sqlite bị xóa. Nhưng có vẻ như tôi không thể tránh tai nạn ứng dụng này. Và để cảm thấy rằng ứng dụng bị treo ngay lập tức sau khi cập nhật là loại đáng thất vọng. bất kỳ ý tưởng ?? – raw3d