Данные контактов в 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)];

Надеюсь, что эта помощь (может не охватывать все ошибки)!

Другие вопросы по тегам