使用try catch获取表单数据库

时间:2019-03-16 13:46:48

标签: ios objective-c database nsfetchrequest

我以常规方式编写了一个提取方法:

-(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;
}

我得到错误的结果!

我不知道这两者之间有什么区别。

  

为什么这些不同?


另外

我添加了try-catch来处理死锁。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

@finally始终运行,无论是否引发异常。由于您将return nil;放在此处,因此所有结果都将被丢弃。一如既往-more in the docs.