【问题标题】:Invalid CFStringRef from ABMultiValueCopyLabelAtIndexABMultiValueCopyLabelAtIndex 中的 CFStringRef 无效
【发布时间】:2012-07-07 21:20:28
【问题描述】:

我正在从通讯录中获取电话号码。我是这样做的:

ABMultiValueRef arrTelefonos = ABRecordCopyValue(contacto,kABPersonPhoneProperty);
for(int i=0;i<ABMultiValueGetCount(arrTelefonos);i++) {
   CFStringRef labelTelefono = ABMultiValueCopyLabelAtIndex(arrTelefonos,i);
   CFStringRef numeroTelefono = ABMultiValueCopyValueAtIndex(arrTelefonos,i);
   CFStringRef labelTelefonoLoc = ABAddressBookCopyLocalizedLabel(labelTelefono);
   /* Do some stuff */
}

一切都很好,除了在一种情况下:如果有一个带有特殊字符标签的电话的联系人(在我的情况下,标签是:带有“é”的“Teléfono”我在做的时候得到一个“无效的 CFStringRef”

CFStringRef labelTelefono = ABMultiValueCopyLabelAtIndex(arrTelefonos,i);

CFStringRef 不允许特殊字符是否存在问题?如果这是问题所在,有人知道解决方案吗?

提前谢谢你

【问题讨论】:

  • CFStringRef 绝对可以包含特殊字符。究竟是什么告诉您该字符串无效;你用这个字符串做什么?
  • 调试应用程序我在“labelTelefono”变量中看到了值“0x000000 Invalid CFStringRef”。我记得这个联系人是从另一个设备导入的,所以很可能是由于重写标签而导致的标签“损坏”,现在应用程序可以工作,但是生成的 CFStringRef 是“Tel.fono”。是否可以正确获取此字符? (谢谢你这么快回答)
  • 我认为这个谜团已经解决了: 1.- 正如我之前所说,这个联系人的标签很可能是“损坏的”,因为用相同的字符重写它,它工作正常 2。 - 第二个谜团(我看到标签为“Tel.fono”)是因为我在调试控制台中看到它,它对特殊字符不“友好”感谢您的关注(您的回答让我进行了更多调查,这需要我的解决方案:))
  • 啊,好的。编码是字符串本身的一个属性;创建字符串的人必须选择对字符足够的编码(例如,某些编码没有定义重音字母)。理想情况下,Apple 使用像 UTF-8 这样非常开放的东西,但在这种情况下他们可能不会。

标签: iphone objective-c addressbook cfstring


【解决方案1】:
NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init];

        ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty);
        for(CFIndex i=0;i<ABMultiValueGetCount(multiPhones);i++) {

            CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i);
            NSString *phoneNumber = (__bridge NSString *) phoneNumberRef;
            [phoneNumbers addObject:phoneNumber];

            //NSLog(@"All numbers %@", phoneNumbers);

        }

【讨论】:

  • 他想要这个标签,而且他还有一个问题是,由于某种原因,字符串的编码对他来说不合适——这似乎是“相关的”但没有答案(他尽可能地解决了它读入 cmets)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多