【问题标题】:How to handle multiple properties on iPhone's addressbook?如何处理 iPhone 通讯录上的多个属性?
【发布时间】:2011-03-12 08:13:28
【问题描述】:

问题在于,在phones 变量处调用的任何方法总是会导致运行时崩溃。 在此版本中,1 (ABMultiValueCopyValueAtIndex) 出现错误。 如果我要评论这一行,代码会在2 (ABMultiValueGetCount) 崩溃。 看来物业是空的。如果我 NSLog phones 变量。我得到(null)。 我在 iPhone 模拟器上测试代码,那里有一些虚拟联系人和一些电话号码。 还有firstNamelastName 的工作就像一个魅力。

for(id person in people){
    NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
    NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
    NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, 0); /*1*/
/*2/  id ph, phLb;
    for (CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {  
        phLb = ABMultiValueCopyLabelAtIndex(phones, i);
        ph = ABMultiValueCopyValueAtIndex(phones, i);
        NSLog(@"%@,%@", phLb, ph);
        CFRelease(phLb);
        CFRelease(ph);
    }
*/  
NSLog(@"%@", firstName);
NSLog(@"%@", lastName);
NSLog(@"%@", phones);
NSLog(@"%@", phone);

[firstName release];
[lastName release];
[phone release];
[phones release];

}

【问题讨论】:

  • 那么你的问题是如何处理空值?
  • 我的问题是,如何从通讯录中获取号码。数字在那里,但我不知何故为空。

标签: iphone objective-c properties addressbook abaddressbook


【解决方案1】:

学习使用调试器。另外,您的代码泄露了。

【讨论】:

  • 我知道它泄漏了。我首先想让它工作,然后保留所有变量。
  • 如果您对地址簿一无所知,请不要回答问题,tc。谢谢!
【解决方案2】:

我认为您关于如何获得 ABMultiValueRef 的假设是错误的。我在这台计算机上没有我的 AB 代码,但请确认 ABRecordCopyValue 是合适的方法。然后研究 ABMultiValueRef 如何访问其内容。这是一个与简单字符串完全不同的对象集。

【讨论】:

  • 正如您在评论部分看到的。我尝试了 id 类型,但也没有用。我认为该示例几乎是从苹果文档中复制粘贴的,即如何使用 multiRef 部分。我明天上班去看看。
【解决方案3】:

代码:

addressBook = ABAddressBookCreate();
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);

释放了地址簿,并且所有从它引用的对象也被释放了。所以指向 MultiValueRefs 的指针在使用前就被释放了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    相关资源
    最近更新 更多