iPhone AddressBook - 如何使用我的应用程序中的应用程序创建新记录

Rui*_*pes 1 iphone record new-operator abaddressbook

我正在尝试通过我的应用程序创建Person的新记录.我有名字,电子邮件和电话号码.我怎样才能将它们传递给newPerson的模态视图?我正在关注Apple的文档,但我被困住了.我正在使用ABNewPersonViewController.那是对的吗?如何填写模态视图中的字段?

谢谢,

RL

sha*_*oga 11

如果您已经有详细信息并且只想将它们写入地址簿,那么您不需要 - ABNewPersonViewController.ABNewPersonViewController用于让用户使用iphone地址簿的通用控制器将记录添加到地址簿中.

相反,你应该做以下事情:

a)将地址簿()框架工作添加到您的应用程序.

b)将地址簿标题导入您的视图.

c)创建一个地址簿实例和一个新记录:

ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();
     ABRecordRef newPerson = ABPersonCreate();
Run Code Online (Sandbox Code Playgroud)

d)对于您使用的单值属性:

  ABRecordSetValue(newPerson, kABPersonFirstNameProperty, CFSTR("Katie"), nil);
  ABRecordSetValue(newPerson, kABPersonLastNameProperty, CFSTR("Bell"), nil);
Run Code Online (Sandbox Code Playgroud)

e)对于您使用的电话号码/邮件等多值属性:

ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);

    ABMultiValueAddValueAndLabel(multiPhone, @"054-5429920", kABHomeLabel, NULL);

    ABMultiValueAddValueAndLabel(multiPhone,@"02-9809878", kABWorkLabel, NULL); 

    ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone,nil);
    CFRelease(multiPhone);


        ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);

    ABMultiValueAddValueAndLabel(multiEmail, @"shannoga@me.com", kABHomeLabel, NULL);

    ABRecordSetValue(newPerson, kABPersonEmailProperty, multiEmail, &error);
    CFRelease(multiEmail);
Run Code Online (Sandbox Code Playgroud)

f)保存对地址簿的更改,你写的所有代码都不会生效:

ABAddressBookAddRecord(addressBook, newPerson, nil);
    BOOL didAdd = ABAddressBookSave(addressBook, nil);
Run Code Online (Sandbox Code Playgroud)

g)删除记录和地址簿,并检查记录是否添加:

CFRelease(newPerson);
    CFRelease(addressBook);
    NSLog(@"didAdd = %d",didAdd);
Run Code Online (Sandbox Code Playgroud)

祝大家好运,希望它有所帮助

SHANI


Jas*_*oco 6

如果要在ABNewPersonViewController中显示某些内容,则必须为要预填充的属性创建并设置ABRecordRef,然后在ABNewPersonViewController上设置displayedPerson属性.所以一个简单的例子可能是:

- (void)createNewPerson
{
  // Create the pre-filled properties
  ABRecordRef newPerson = ABPersonCreate();
  CFErrorRef error = NULL;
  ABRecordSetValue(newPerson, kABPersonFirstNameProperty, CFSTR("John"), &error);
  ABRecordSetValue(newPerson, kABPersonLastNameProperty, CFSTR("Smith"), &error);
  NSAssert( !error, @"Something bad happened here." );

  // Create and set-up the new person view controller
  ABNewPersonViewController* newPersonViewController = [[ABNewPersonViewController alloc] initWithNibName:nil bundle:nil];
  [newPersonViewController setDisplayedPerson:newPerson];
  [newPersonViewController setNewPersonViewDelegate:self];

  // Wrap in a nav controller and display
  UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:newPersonViewController];
  [self presentModalViewController:navController animated:YES];

  // Clean up everything
  [navController release];
  [newPersonViewController release];
  CFRelease(newPerson);
}
Run Code Online (Sandbox Code Playgroud)