【发布时间】:2015-07-20 12:10:34
【问题描述】:
我正在使用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 以删除我存储中的损坏数据。但它不起作用……
【问题讨论】:
标签: objective-c core-data core-data-migration nscoder nskeyedunarchiver