CoreData
アプリでオフライン ストレージを管理するために使用しています。NSObject
オフラインストレージのデータは、変形可能としてカスタムに保存されxcdatamodel
ます。
アプリの現在のバージョン ( v1.0 ) はNavigation
クラスを保存しています。
Navigation
コードベースの別のターゲットでの名前空間の問題に対処するために、クラスの名前を変更する必要がありました。
CoreData
バージョン 2.0 では、ストアを検索しているときにクラスNSKeyedUnarchiver
が見つからないために失敗するため、アプリがクラッシュします。Navigation
CoreData
この問題に対処するために現在のストアを移行する最善の方法は何ですか?
私はこのようなことを試しました:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"OfflineStorage"];
request.fetchLimit = 1;
request.predicate = [NSPredicate predicateWithFormat:@"storageID = 1"];
NSError *error;
NSArray *result;
@try {
result = [context executeFetchRequest:request error:&error];
}
@catch (NSException *exception) {
if([exception.name isEqualToString:NSInvalidUnarchiveOperationException]) {
NSFetchRequest *deleteRequest = [request copy];
deleteRequest.resultType = NSManagedObjectIDResultType;
deleteRequest.includesPropertyValues = NO;
deleteRequest.propertiesToFetch = @[];
NSArray *deleteResult = [context executeFetchRequest:request error:&error];
if(deleteResult.count) {
[context performBlockAndWait:^{
[context deleteObject:deleteResult.firstObject];
[context save:nil];
}];
}
}
}
例外をキャッチし、ObjectID のみをフェッチして、ストア内の破損したデータを削除するのは賢明だと思います。しかし、うまくいきません…</p>