使用 try catch 获取表单数据库
Fetch form database with try catch
我按常规写了一个fetch方法:
-(FXPCallLog *)getCallLogWithID:(NSString *)logID{
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:[[FXPCallLog class] description]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"logID = %@", logID];
[request setPredicate:predicate];
NSError *err = nil;
NSArray *result = [self.moc executeFetchRequest:request error:&err];
if (!err && result && result.count > 0){
FXPCallLog *foundLog = (FXPCallLog *)[result firstObject];
return foundLog;
}
return nil;
}
而且效果很好。
但是当我将结果更改为:
NSArray *result = [[NSArray alloc] init];
@try {
result = [NSArray arrayWithArray:[self.moc executeFetchRequest:request error:&err]];
} @catch (NSException *exception) {
NSLog(@"deadlock :/");
} @finally {
return nil;
}
我得到了错误的结果!
我搞不懂这两者有什么区别。
Why these are different ?
另外
我添加了 try-catch 来处理死锁。
任何意见和建议将不胜感激。
@finally
始终是 运行,无论是否抛出异常。因为你把 return nil;
放在那里,你所有的结果都会被丢弃。一如既往 - more in the docs.
我按常规写了一个fetch方法:
-(FXPCallLog *)getCallLogWithID:(NSString *)logID{
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:[[FXPCallLog class] description]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"logID = %@", logID];
[request setPredicate:predicate];
NSError *err = nil;
NSArray *result = [self.moc executeFetchRequest:request error:&err];
if (!err && result && result.count > 0){
FXPCallLog *foundLog = (FXPCallLog *)[result firstObject];
return foundLog;
}
return nil;
}
而且效果很好。
但是当我将结果更改为:
NSArray *result = [[NSArray alloc] init];
@try {
result = [NSArray arrayWithArray:[self.moc executeFetchRequest:request error:&err]];
} @catch (NSException *exception) {
NSLog(@"deadlock :/");
} @finally {
return nil;
}
我得到了错误的结果!
我搞不懂这两者有什么区别。
Why these are different ?
另外
我添加了 try-catch 来处理死锁。
任何意见和建议将不胜感激。
@finally
始终是 运行,无论是否抛出异常。因为你把 return nil;
放在那里,你所有的结果都会被丢弃。一如既往 - more in the docs.