2

当名称来自用户添加时,我在推送 ABpersonViewController 时遇到问题,然后一切正常,但是当名称来自默认模拟器条目时,它不起作用我将在代码中详细解释

-(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);
}
4

1 回答 1

2

我替换了您将 NSString 转换为 CFStringRef 的代码:

这是如果您使用 ARC:

 CFStringRef cfstringRef = (__bridge_retained  CFStringRef)string;

但似乎你不是,所以对于非 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);
}
于 2013-08-02T06:13:18.797 回答