2013-02-11 116 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及更高版本。