我CoreData
用来管理我的应用程序中的离线存储。离线存储的数据以自定义NSObject
形式保存在xcdatamodel
.
我在应用程序 ( v1.0 )中的当前版本正在存储Navigation
该类。
我需要重命名Navigation
该类以解决我的代码库的另一个目标中的一些名称空间问题。
在 2.0 版中,应用程序崩溃了,因为当我搜索CoreData
商店时,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>