下面的代码按名字和姓氏为我创建了一个地址簿中所有联系人的数组。问题是,我有一个联系人一直显示空的名字和姓氏。在我的实际通讯簿中找不到那个联系人。有人能建议如何调试它来找出神秘鬼联系的来源吗?
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反省这个对象,但不能从中得到任何有价值的东西。
我想查看Person的所有属性,但将对象取消指定给(abperson*)似乎不可行。
我也试过用cfshow(person)显示它是cprecord类型。但是,找不到关于这方面的进一步文档。
在gdb中,我可以做些什么来进一步检查这个特定的人对象,看看它的来源是从哪里来的?