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