Пустое поле, отображаемое на iPhone AddressBook, как отлаживать? - PullRequest
0 голосов
/ 25 мая 2009

Следующий код создает мне массив всех моих контактов в моей адресной книге по имени и фамилии. Проблема в том, что у меня есть один контакт, который постоянно появляется с пустым именем и фамилией. Я не могу найти этот контакт в моей фактической адресной книге. Может кто-нибудь предложить, как отладить это, чтобы выяснить источник таинственного призрака?

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *peopleArray = (NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *allNames = [NSMutableArray array];

for (id person in peopleArray) {
    NSMutableString *firstName = [(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) autorelease];
    NSMutableString *lastName = [(NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty) autorelease];
    ABMutableMultiValueRef multiValueEmail = ABRecordCopyValue(person, kABPersonEmailProperty);
    if (ABMultiValueGetCount(multiValueEmail) > 0) {
        NSString *email = [(NSString *)ABMultiValueCopyValueAtIndex(multiValueEmail, 0) autorelease];
    }

    if (![firstName length]) {
     firstName = @"";
    }
    if (![lastName length]) lastName = @"";

    [allNames addObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName]];
}

Тип персоны относится к типу NSCFType. Я мог бы легко сделать что-то вроде:

    if (![lastName length] && ![firstName length]) continue;

.. и покончим с проблемой. Мне любопытно, какая запись в моей адресной книге выглядит как призрак. Я попытался проанализировать объект с помощью gdb, но не смог извлечь из него ничего ценного.

Я бы хотел увидеть все свойства для персонажа, но разыменование объекта (ABPerson *), похоже, не делает этого.

Я также пытался использовать CFShow (person), который показывает, что это тип CPRecord. Однако не могу найти дополнительную документацию по этому вопросу.

Есть ли в gdb что-то, что я могу сделать для дальнейшей проверки этого конкретного объекта человека, чтобы увидеть, откуда исходит его источник?

Ответы [ 2 ]

1 голос
/ 25 мая 2009

Это, вероятно, контакт, который является только организацией

попробуйте посмотреть на эти свойства

Эти константы реализуют свойство типа персонажа (свойство типа kABIntegerPropertyType), который указывает, есть ли у человека запись представляет человека или организация.

     const ABPropertyID kABPersonKindProperty;
     const CFNumberRef kABPersonKindPerson;
     const CFNumberRef kABPersonKindOrganization;
1 голос
/ 25 мая 2009

Запись, вероятно, помечена как запись организации, а не как запись о человеке. В этом случае вам придется извлечь название организации, а не имя и фамилию.

Попробуйте посмотреть свойства:

kABPersonOrganizationProperty, kABPersonKindProperty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...