【发布时间】:2014-05-18 22:35:36
【问题描述】:
我在后台线程中(应用启动后不久)对数据库进行了一些非必要的更改,然后将它们合并到主上下文中。后台线程最终可能会进行很多更改,但我不希望上下文保存在此后台处理中因某些验证错误或某些难以理解的 Core Data 异常而绊倒;特别是因为我将 iCloud 与 Core Data 一起使用,用户最终可能会得到无效的关系,等等。我只想让应用继续运行,而不是抛出异常并退出。
在这种情况下,在上下文保存周围有一个@try-@catch 块是否有意义?这样做是否存在任何性能或内存管理问题?
类似这样的:
@try {
[context performBlockAndWait: ^{
NSError *error = nil;
if ([context save:&error]){
NSLog(@"Child context saved");
[context.parentContext performBlockAndWait:^{
NSError *parentError = nil;
if ([context.parentContext save: &parentError]){
NSLog(@"Parent context saved");
}
}];
}
}];
} ....
我的应用交付给了成千上万的客户,因此如果提前知道这是否会导致比它解决的问题更多的问题,那就太好了。
【问题讨论】:
-
除非你能以安全的方式从异常中恢复,否则捕获它并没有多大意义。
标签: core-data grand-central-dispatch nsmanagedobjectcontext