1

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

谢谢,

强化学习

4

2 回答 2

11

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

相反,您应该执行以下操作:

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

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

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

ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();
     ABRecordRef newPerson = ABPersonCreate();

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

  ABRecordSetValue(newPerson, kABPersonFirstNameProperty, CFSTR("Katie"), nil);
  ABRecordSetValue(newPerson, kABPersonLastNameProperty, CFSTR("Bell"), nil);

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);

f) 保存对地址簿的更改,如果没有这个,您编写的任何代码都不会生效:

ABAddressBookAddRecord(addressBook, newPerson, nil);
    BOOL didAdd = ABAddressBookSave(addressBook, nil);

g) 释放记录和通讯录并检查记录是否添加:

CFRelease(newPerson);
    CFRelease(addressBook);
    NSLog(@"didAdd = %d",didAdd);

祝你好运希望它有所帮助

沙尼

于 2010-12-19T21:19:03.583 回答
6

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

- (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);
}
于 2010-12-19T20:37:15.553 回答