2012-01-12 33 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]]; 
        } 

      } 

     } 

可悲的是代碼崩潰在與信號SIGSEGV「如果」語句來行,崩潰日誌表明,與ABRecordCopyValue發生故障()。 ..任何建議如何解決這個問題?

+2

當出現錯誤時記錄爲零嗎? 'ABRecordWithAddressBook'的返回值是參與者的地址簿記錄,如果沒有找到記錄,則返回nil。我猜如果記錄爲零,複製操作可能會失敗。 – ikuramedia 2012-01-16 17:51:40

回答

5

因爲您沒有發佈完整的代碼,我無法自己調試問題。但我認爲答案是由ikuragames在評論中給出的。崩潰最可能的原因是,執行代碼時可能是空記錄。調試代碼並檢查記錄和kABPersonFirstNameProperty的值。如果我是正確的,那麼您應該分配一些初始值進行記錄或根據需要更改您的代碼。如果它不能解決你的問題,那麼就用一點點深入的描述來發布調試信息。

:)

感謝ü..

1

你可以簡單的測試記錄是在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]]; 
       } 
     } 
    }