Получить базу данных формы с помощью try catch - PullRequest
1 голос
/ 16 марта 2019

Я написал метод выборки обычным способом:

-(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 Ответ

2 голосов
/ 16 марта 2019

@finally всегда выполняется, независимо от того, было ли выброшено исключение или нет.Так как вы положили туда return nil;, все ваши результаты будут отброшены.Как всегда - больше в документации.

...