ABRecordCopyValue () SIGSEGV - PullRequest
       30

ABRecordCopyValue () SIGSEGV

1 голос
/ 12 января 2012

В настоящее время я выбираю все контакты из адресной книги и хочу сохранить дату последнего знакомства с конкретным контактом. Поэтому я извлекаю календарь одновременно, как показано ниже:

for (EKEvent* event in events) {
            for (EKParticipant* attende in [event attendees]) {
                ABRecordRef record = [attende ABRecordWithAddressBook:addressBook];
                if([contact.name isEqualToString:[NSString stringWithFormat:@"%@ %@", (__bridge NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty), (__bridge NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty)]]){
                        contact.lastMet = [NSString stringWithFormat:@"%@",[formatter stringFromDate:event.endDate]];
                    }

            }

        }

К сожалению, код вылетает в строке «если» с сигналом SIGSEGV, журнал сбоев указывает, что сбой происходит с ABRecordCopyValue () ... Есть предложения, как решить эту проблему?

Ответы [ 2 ]

5 голосов
/ 21 января 2012

Поскольку вы не опубликовали полный код, я не могу отладить проблему самостоятельно.Но я думаю, что ответ дается ikuragames в комментарии. Наиболее вероятная причина сбоя заключается в том, что при выполнении кода запись может быть нулевой. Отладьте код и проверьте значение записи и kABPersonFirstNameProperty. Если я тогда правВы должны назначить начальное значение для записи или изменить свой код в соответствии с необходимостью.Если это не решит вашу проблему, то опубликуйте информацию об отладке с небольшим подробным описанием.

:)

Спасибо.

1 голос
/ 23 января 2012

Вы можете просто проверить, что запись не равна нулю в начале оператора if. Если тест не пройден, остальная часть выражения не оценивается. Поэтому следующее должно вылечить ваш сбой.

for (EKEvent* event in events) {
        for (EKParticipant* attende in [event attendees]) {
            ABRecordRef record = [attende ABRecordWithAddressBook:addressBook];
            if(record && [contact.name isEqualToString:[NSString stringWithFormat:@"%@ %@", (__bridge NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty), (__bridge NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty)]]){
                    contact.lastMet = [NSString stringWithFormat:@"%@",[formatter stringFromDate:event.endDate]];
                }
        }
    }
...