iPhone AddressBook - как создать новую запись с приложением из моего приложения

Я пытаюсь создать новую запись о человеке через мое приложение. У меня есть имя, электронная почта и номер телефона. Как я могу передать их в модальное представление newPerson? Я слежу за документами Apple, но застрял. Я использую ABNewPersonViewController. Это правильно? Как заполнить поля в модальном представлении?

Спасибо,

RL


person Rui Lopes    schedule 19.12.2010    source источник


Ответы (2)


Если вы хотите отобразить что-то в ABNewPersonViewController, вам нужно создать и настроить ABRecordRef для свойств, которые вы хотите предварительно заполнить, а затем установить свойство displayPerson в ABNewPersonViewController. Итак, простой пример может быть:

- (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);
}
person Jason Coco    schedule 19.12.2010
comment
Привет, большое спасибо. Чтобы добавить номер телефона, как я могу это сделать? CFSTR не работает. Что эквивалентно целому числу? - person Rui Lopes; 20.12.2010

если у вас уже есть данные и вы просто хотите записать их в адресную книгу, то вам не нужен - ABNewPersonViewController. ABNewPersonViewController используется для предоставления пользователю возможности добавлять запись в адресную книгу с помощью общего контроллера адресной книги iphone.

вместо этого вы должны сделать следующее:

а) добавьте адресную книгу () в ваше приложение.

б) импортировать заголовки адресной книги в ваше представление.

c) создать экземпляр адресной книги и новую запись:

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

г) для свойств с одним значением, которые вы используете:

  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, @"[email protected]", 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);

вот и все удачи надеюсь помогло

Шани

person shannoga    schedule 19.12.2010
comment
здорово, правильно! (Если вы добавите CFErrorRef error = NULL, это прекрасно!) - person elp; 09.01.2011