上次更新 Xcode 5.1 后,Apple 的地址簿排序示例代码停止运行。网址:https://developer.apple.com/library/ios/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/DirectInteraction.html
示例代码
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
kCFAllocatorDefault,
CFArrayGetCount(people),
people
);
CFArraySortValues(
peopleMutable,
CFRangeMake(0, CFArrayGetCount(peopleMutable)),
(CFComparatorFunction) ABPersonComparePeopleByName,
(void*) ABPersonGetSortOrdering()
);
CFRelease(addressBook);
CFRelease(people);
CFRelease(peopleMutable);
但是现在,这段代码引发了警告
从较小的整数类型“ABPersonSortOrdering”(又名“unsigned int”)转换为“void *”
在这一行
(void*) ABPersonGetSortOrdering())
我应该如何修改这段代码?
实际上,我查看了 Apples 的论坛,用 Google 搜索过,用 Stackoverflow 搜索过,但仍然没有任何乐趣。
希望你能帮助我。
更新
It seams using 64bit 与此警告有关。它与我的新 iPhone 5s 的包含相吻合。
最佳答案
正如您所说,问题出在新的 64 位架构上。 (void*)
是 32 位指针用于 32 位架构,但 64 位指针用于 64 位架构。函数 ABPersonGetSortOrdering()
返回类型为 ABPersonCompositeNameFormat
的值,在 ABPerson.h 中指定为 uint32_t
。所以警告是让你知道一个 64 位指针指向一个 32 位数字。
可以通过将返回值类型转换为 unsigned long
来消除警告。这是完美的,因为它将在 64 位架构上为 64 位,在 32 位架构上为 32 位。
(void *)(unsigned long)ABPersonGetSortOrdering()
希望这对您有所帮助!
关于ios - 如何在 iOS 7.1 中对联系人进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22464765/