2012-01-12 1 views
1

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

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

      } 

     } 

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

+2

Действительно ли «запись» при получении ошибки? Возвращаемое значение 'ABRecordWithAddressBook' - это' Запись адресной книги для участника, или nil, если запись не найдена. 'Я думаю, операция копирования может завершиться неудачно, если запись равна нулю. – ikuramedia

ответ

5

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

:)

Спасибо и ..

1

Вы можете просто проверить записи не являясь ноль в начале Условный оператор. Если тест завершился неудачно, остальная часть выражения не будет оценена. Таким образом, вы должны вылечить свой крах.

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