Prakash Desai
Prakash Desai

Reputation: 511

Issue in Pushing ABPersonViewController

i am having trouble in pushing ABpersonViewController when the name is from user added then everything works perfectly but when name is from default simulator entries then its not working i will explain in detail in code

-(void)showPersonViewController:(NSString *)name  
{
    ABAddressBookRef addressBook = ABAddressBookCreate();
    NSString *string = name;
    NSLog(@"%@",string);
    CFStringRef cfstringRef = (CFStringRef)string;
    NSArray *peoplee = (NSArray *)ABAddressBookCopyPeopleWithName(addressBook, cfstringRef);
    NSLog(@"%@",peoplee);
    // 1ST QUESTION when contact is from defalut contact nslog is null but when from user added then it has value I dont understand why this is happening 
    if ((peoplee != nil) && [peoplee count])
    {
        ABRecordRef person = (ABRecordRef)[peoplee objectAtIndex:0];
        ABPersonViewController *picker = [[ABPersonViewController alloc] init];
        picker.personViewDelegate = self;
        picker.displayedPerson = person;

        picker.allowsEditing = YES;
        [self.navigationController pushViewController:picker animated:YES];
    }
    else
    {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Could not find Appleseed in the Contacts application"
                                                       delegate:nil
                                              cancelButtonTitle:@"Cancel"
                                              otherButtonTitles:nil];
        [alert show];
    }
    CFRelease(addressBook);
}

Upvotes: 2

Views: 420

Answers (1)

Puneet Sharma
Puneet Sharma

Reputation: 9484

I replaced your code of converting NSString To CFStringRef :

This is if you are using ARC:

 CFStringRef cfstringRef = (__bridge_retained  CFStringRef)string;

But it seems you are not, so for Non ARC:

CFStringRef cfstringRef = (CFStringRef)string;

-(void)showPersonViewController
{
  ABAddressBookRef addressBook = ABAddressBookCreate();
  NSString *string = @"Appleseed";
  CFStringRef cfstringRef = (CFStringRef)string;
  NSArray *peoplee = (NSArray *)ABAddressBookCopyPeopleWithName(addressBook, cfstringRef);
  NSLog(@"%@",peoplee); // does not print null if you have Appleseed as your contact
  if ((peoplee != nil) && [peoplee count])
  {
    ABRecordRef person = (ABRecordRef)[peoplee objectAtIndex:0];
    ABPersonViewController *picker = [[ABPersonViewController alloc] init];
    picker.personViewDelegate = self;
    picker.displayedPerson = person;
    // Allow users to edit the person’s information
    picker.allowsEditing = YES;
    [self.navigationController pushViewController:picker animated:YES];
  }
  else
  {
    // Show an alert if "Appleseed" is not in Contacts
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:@"Could not find Appleseed in the Contacts application"
                                                   delegate:nil
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:nil];
    [alert show];
  }
  CFRelease(addressBook);
}

Upvotes: 2

Related Questions