2013-02-11 112 views
0

我有以下cpde:改變ABRecordRef財產

ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(self.recordRef_)); 

CFErrorRef error = NULL; 

    if ([self.nameTextField_.text isNotNull]){ 
     NSArray *nameStringArray = [self.nameTextField_.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
     ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFTypeRef)([nameStringArray objectAtIndex:0]), NULL); 
     if ([nameStringArray count] > 1){ 
      ABRecordSetValue(person, kABPersonLastNameProperty, (__bridge CFTypeRef)([nameStringArray lastObject]), &error); 
     } 
    } 

但是,此代碼它給我這個錯誤後:

Error Domain=ABAddressBookErrorDomain Code=0 "The operation couldn’t be completed. (ABAddressBookErrorDomain error 0.)" 

任何想法,這是爲什麼?

回答

2

錯誤消息似乎很沒用,但由於您的代碼的其餘部分看起來是有效的,我的猜測是您的應用程序未被用戶授權訪問通訊簿數據庫。使用如下代碼嘗試訪問ADRESS書之前檢查你的授權狀態:

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
    // We're good to go 
} else { 
    // Hasn't been authorized by the user 
    // You can check the exact authorization status for more information on the 
    // exact reason why you can't access the Address Book (e.g. denied, restricted, etc.) 
} 
0

這種情況發生時,你使用的是不處理您要添加到聯繫人領域的聯繫後端。在你的情況下,我懷疑你的後端根本不處理寫操作。這真是令人驚訝。

關於這個問題的看到蘋果的文檔:

enum { 
    kABOperationNotPermittedByStoreError = 0, 
    kABOperationNotPermittedByUserError 
}; 

kABOperationNotPermittedByStoreError

的操作不受通訊簿數據庫允許的,因爲接觸的源不支持它。

適用於iOS 2.0及更高版本。

kABOperationNotPermittedByUserError

操作是不允許的,因爲用戶拒絕訪問到地址簿數據庫。

適用於iOS 6.0及更高版本。