Данные контактов в xcode
Все.. Я пытаюсь разработать приложение для iPhone, которое в основном имеет дело с ABAddressBook
и данные о контактах... Моя цель - отправить все данные о контактах (на первом этапе, имена и телефоны) в файл по электронной почте.
Теперь я пытаюсь получить доступ к данным контактов и хочу добавить их в два разных массива: имена и массивы телефонов.
Сначала я пытаюсь увидеть все данные на экране, когда нажимаю кнопку "Список контактов". данные должны быть видны на экране. а затем, когда я нажал вторую кнопку "Отправить контакты", он должен отправить файл на учетную запись электронной почты.. Вот как мои приложения будут работать..
У меня проблемы с отображением данных на экране. Я написал что-то, но это ничего не дает на экране в textView. Можете ли вы помочь мне решить эту проблему?
Вот код для перечисления контактов (метод listCon):
-(IBAction)listCon:(id)sender
{
NSMutableArray *names = [[NSMutableArray alloc] init];
NSMutableArray *numbers1= [[NSMutableArray array] init];
NSMutableArray *numbers2= [[NSMutableArray array] init];
NSMutableArray *numbers3= [[NSMutableArray array] init];
ABAddressBookRef addressBook = ABAddressBookCreate();
if (addressBook != nil)
{
NSLog(@"Successfully accessed the address book.");
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople= ABAddressBookGetPersonCount(addressBook);
NSUInteger peopleCounter = 0;
for (peopleCounter = 0;peopleCounter < nPeople; peopleCounter++)
{
ABRecordRef thisPerson = CFArrayGetValueAtIndex(allPeople,peopleCounter);
NSString *contactFirstLast = [NSString stringWithFormat:@"%,%",ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty), ABRecordCopyValue(thisPerson,kABPersonLastNameProperty)];
[names insertObject:contactFirstLast atIndex:peopleCounter];
ABMultiValueRef phoneNumbers = ABRecordCopyValue(thisPerson,kABPersonPhoneProperty);
NSString *firstPhone = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
NSString *secondPhone = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, 1);
NSString *thirdPhone = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, 2);
[numbers1 insertObject:firstPhone atIndex:peopleCounter];
[numbers2 insertObject:secondPhone atIndex:peopleCounter];
[numbers3 insertObject:thirdPhone atIndex:peopleCounter];
}
}
myView.text=[names componentsJoinedByString:@"\n\n"];
myView.text=[numbers1 componentsJoinedByString:@"\n\n"];
myView.text=[numbers2 componentsJoinedByString:@"\n\n"];
myView.text=[numbers3 componentsJoinedByString:@"\n\n"];
}
1 ответ
Просто взглянув на свой код, вы не можете сделать это:
NSString *contactFirstLast = [NSString stringWithFormat:@"%,%",ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty), ABRecordCopyValue(thisPerson,kABPersonLastNameProperty)];
Есть несколько ошибок: во-первых %
в вашем stringWithFormat:
не является спецификатором формата; вы, вероятно, думаете о %@
, Во-вторых, копирование значения kABPersonFirstNameProperty
вернет CFStringRef
и это не то, что вы хотите отобразить имя в текстовом поле. Вы должны будете бесплатно соединить результат ABRecordCopyValue()
, Вы можете сделать это, добавив эту строку - (__bridge_transfer NSString *)
- перед вашим ABRecordCopyValue()
"S. Со всеми исправлениями это должно выглядеть так:
NSString *contactFirstLast = [NSString stringWithFormat:@"%@,%@", (__bridge_transfer NSString *)ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty), (__bridge_transfer NSString *)ABRecordCopyValue(thisPerson,kABPersonLastNameProperty)];
Надеюсь, что эта помощь (может не охватывать все ошибки)!