无法将地址保存到ABRecordRef

时间:2014-09-25 09:31:42

标签: objective-c ios8 abaddressbook abrecord

我试图为选择的联系人添加地址:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
                         didSelectPerson:(ABRecordRef)person{

    // Adding address
    ABMutableMultiValueRef addressMultipleValue = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
    NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init];
    [addressDictionary setObject:@"8-15 Dereham Place" forKey:(NSString *)kABPersonAddressStreetKey];
    [addressDictionary setObject:@"London" forKey:(NSString *)kABPersonAddressCityKey];
    [addressDictionary setObject:@"EC2A 3HJ" forKey:(NSString *)kABPersonAddressZIPKey];
    [addressDictionary setObject:@"United Kingdom" forKey:(NSString *)kABPersonAddressCountryKey];
    [addressDictionary setObject:@"gb" forKey:(NSString *)kABPersonAddressCountryCodeKey];

    ABMultiValueAddValueAndLabel(addressMultipleValue, (__bridge CFTypeRef)(addressDictionary), kABHomeLabel, NULL);

    ABRecordSetValue(person, kABPersonAddressProperty, addressMultipleValue, nil);
    CFErrorRef anError = NULL;
    BOOL didSet;

    didSet = ABAddressBookSave(_addressBook, NULL);
    if (!didSet) {
        NSError *er = (__bridge NSError *)(anError);
        NSLog(@"Error saving record: %@", er.localizedDescription);}else{
            NSLog(@"Record updated successfully");
        }
    CFRelease(addressMultipleValue);
}

正如我在控制台中看到的那样,保存它没有问题。但是,当我在通讯录应用程序中打开联系人时,没有保存的地址。

2 个答案:

答案 0 :(得分:2)

发行说明非常有帮助。两个项都没有引用:" ABPeoplePickerNavigationController.h"或者新的" PeoplePicker:选择一个人或财产样本项目"可以找到。

Apple"增强"已经给我的20个商业应用程序提供了依赖AB的联系信息。再次感谢Apple修复了一些没有破坏的东西。

答案 1 :(得分:0)

引用 iOS 8发行说明文档:

  

已针对iOS 8更改了地址簿UI人员选择器。添加了一个带有新API的新模式,其中应用程序不需要访问用户的联系人,也不会提示用户进行访问。所选人员的临时副本将返回给应用程序。有关详细信息,请参阅ABPeoplePickerNavigationController.h。

     

查看新的PeoplePicker:选择演示新模式使用情况的人员或财产示例项目。

所以你要满足新的API,在此之前,你可能只使用临时副本而不是实际的数据库,实际上是联系人应用程序访问。