2016-04-01 78 views
2

通訊錄中未添加聯繫人。錯誤將人員保存到iOS 9中的AddressBook,但在iOS 6中工作。當我添加聯繫人,然後執行if塊以將日誌錯誤保存到AddressBook。使用地址簿框架iOS 9導出聯繫人時出錯?

-(void)addContactToPhoneBook{ 

ABPeoplePickerNavigationController *peoplePicker=[[ABPeoplePickerNavigationController alloc] init]; 
addressBook = [peoplePicker addressBook]; 

// create person record 
person = ABPersonCreate(); 

cfError = nil; 


if (firstName) { 
    ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFTypeRef)(firstName) , nil); 
} 

if (jobTitle) { 
    ABRecordSetValue(person, kABPersonJobTitleProperty,(__bridge CFTypeRef)(jobTitle), nil); 
} 

if (personEmail) 
{ 
    ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFStringRef) personEmail, kABWorkLabel, NULL); 
    ABRecordSetValue(person, kABPersonEmailProperty, emailMultiValue, nil); 
    CFRelease(emailMultiValue); 
} 

if (phoneNo) 
{ 
    ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
    NSArray *venuePhoneNumbers = [phoneNo componentsSeparatedByString:@" or "]; 
    for (NSString *venuePhoneNumberString in venuePhoneNumbers) 
     ABMultiValueAddValueAndLabel(phoneNumberMultiValue, (__bridge CFStringRef) venuePhoneNumberString, kABPersonPhoneMainLabel, NULL); 
    ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, nil); 
    CFRelease(phoneNumberMultiValue); 
} 

// add address 

ABMutableMultiValueRef multiAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType); 
NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init]; 

ABMultiValueAddValueAndLabel(multiAddress, (__bridge CFDictionaryRef) addressDictionary, kABWorkLabel, NULL); 
ABRecordSetValue(person, kABPersonAddressProperty, multiAddress, NULL); 
CFRelease(multiAddress); 


//Add person Object to addressbook Object. 
ABAddressBookAddRecord(addressBook, person, &cfError); 

if (ABAddressBookSave(addressBook, nil)) 
{ 
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Success" message:@"Contact added sucessfully" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [alert show]; 
    NSLog(@"\nPerson Saved successfuly"); 
} else 
{ 
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Failed" message:@"Failed to add contact" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [alert show]; 
    NSLog(@"\n Error Saving person to AddressBook"); 
} 
} 

回答

0

試試這個

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    arrContactName = [[NSMutableArray alloc]init]; 
    arrPhoneNumber = [[NSMutableArray alloc]init]; 
    arrAddContact = [[NSMutableArray alloc]init]; 

} 
-(void)viewWillAppear:(BOOL)animated 
{ 
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); 

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) 
    { 
     ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { 
      if (granted) { 
       [self dismissViewControllerAnimated:YES completion:nil]; 
      } else { 
       [self dismissViewControllerAnimated:YES completion:nil]; 
      } 
     }); 
    } 
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) 
    { 
     [self getAllContacts]; 
    } 
    else 
    { 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Unable to Access!" message:@"Grant us access now! Change privacy setting in settings app." delegate:self cancelButtonTitle:@"Not now" otherButtonTitles:@"OK", nil]; 
     [alert show]; 
    } 
} 
#pragma mark - 
#pragma mark - Get All Contacts 
-(void)getAllContacts 
{ 
    CFErrorRef error = NULL; 
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); 

    if (addressBook != nil) 
    { 
     NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 

     NSUInteger i = 0; 
     for (i = 0; i < [allContacts count]; i++) 
     { 
      ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i]; 
      NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty); 
      NSString *lastName = (__bridge_transfer NSString *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty); 
      if (lastName == nil) { 
       strLastname = @""; 
      } 
      else 
       strLastname = lastName; 

      NSString *fullName = [NSString stringWithFormat:@"%@ %@", firstName, strLastname]; 
      NSString *phone=nil; 
      ABMultiValueRef phoneNumbers = ABRecordCopyValue(contactPerson,                    kABPersonPhoneProperty); 
      if (ABMultiValueGetCount(phoneNumbers) > 0) { 
       phone = (__bridge_transfer NSString*) 
       ABMultiValueCopyValueAtIndex(phoneNumbers, 0); 
      } else { 
       phone = @"[None]"; 
      } 
      [arrContactName addObject:fullName]; 
      [arrPhoneNumber addObject:phone]; 
      NSLog(@"Full Name =%@",fullName); 
      NSLog(@"Phone Number =%@",phone); 
     } 
     CFRelease(addressBook); 
    } 
} 

希望這有助於。

+0

請再次檢查問題。 – niks290192

相關問題