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

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

Спасибо,

RL

Ответы [ 2 ]

11 голосов
/ 20 декабря 2010

если у вас уже есть данные и вы просто хотите записать их в адресную книгу, тогда вам не нужен - 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) сохранить изменения вадресная книга, ни один из написанных вами кодов не вступит в силу:* это все удачи, надеюсь, это помогло

Шани

6 голосов
/ 19 декабря 2010

Если вы хотите отобразить что-то в 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);
}
...