【问题标题】:Blank field showing up on iPhone AddressBook, how to debug?iPhone通讯录上出现空白字段,如何调试?
【发布时间】:2009-05-25 04:43:51
【问题描述】:

以下代码按名字和姓氏在我的通讯录中为我创建了一个包含所有联系人的数组。问题是,我有一个联系人一直以空的名字和姓氏出现。我在我的实际通讯录中找不到那个联系人。谁能建议如何调试它以找出神秘幽灵联系人的来源?

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 中做些什么来进一步检查这个特定的人对象以查看它的来源吗?

【问题讨论】:

  • 这些属性中是否有声明为返回可变对象?我不明白你为什么在那里使用可变对象类的名称。另外,您确定 firstName 和 lastName 为空而不是 nil 吗?您在循环结束时将 nil 替换为 empty;你在替换之前还是之后检查了变量?
  • 嗨,彼得,如果它们为零,我将它们替换为空,否则我的输出中会出现类似 Joe (null) 的内容。如果有更好的方法,我很想听听。这就是为什么我将它们声明为可变对象。如果有更好的方法来写这个,我很想学习。

标签: iphone objective-c cocoa cocoa-touch gdb


【解决方案1】:

该条目可能被标记为组织记录,而不是个人记录。在这种情况下,您必须提取组织名称而不是名字和姓氏。

尝试查看以下属性:

kABPersonOrganizationProperty, kABPersonKindProperty

【讨论】:

  • 听起来可能是问题所在,我猜是默认的 Apple Computer 条目。知道如何检查 gdb 中的 person 变量以查看其在内存中的全部内容吗?
【解决方案2】:

IT 可能只是一个组织的联系人

尝试查看这些属性

这些常量实现了 person 类型属性( 类型 kABIntegerPropertyType),其中 表示一个人是否记录 代表一个人或一个 组织。

     const ABPropertyID kABPersonKindProperty;
     const CFNumberRef kABPersonKindPerson;
     const CFNumberRef kABPersonKindOrganization;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2013-06-17
    • 2011-03-12
    • 2012-12-12
    相关资源
    最近更新 更多