0

我有以下cpde:

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.)"

知道这是为什么吗?

4

2 回答 2

2

错误消息似乎毫无用处,但由于您的其余代码看起来是有效的,我猜您的应用程序尚未被用户授权访问通讯簿数据库。在尝试访问地址簿之前,使用如下代码检查您的授权状态:

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.)
}
于 2013-02-11T00:38:33.687 回答
0

当您使用的联系人后端不处理您尝试添加到联系人的字段时,就会发生这种情况。在你的情况下,我怀疑你的后端根本不处理写操作..这真是令人惊讶。

请参阅有关该主题的 Apple 文档:

enum {
   kABOperationNotPermittedByStoreError = 0,
   kABOperationNotPermittedByUserError 
};

kABOperationNotPermittedByStoreError

地址簿数据库不允许该操作,因为联系人的来源不支持它。

在 iOS 2.0 及更高版本中可用。

kABOperationNotPermittedByUserError

不允许该操作,因为用户拒绝访问通讯簿数据库。

在 iOS 6.0 及更高版本中可用。

于 2016-03-07T09:35:22.680 回答