ios - 如何在 iOS 7.1 中对联系人进行排序

标签 ios 64-bit abaddressbook ios7.1

上次更新 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/

相关文章:

ios - 流式/分块 HTTP 和 NSURLSession 挂起

.net - 已安装 VSTO x64 运行时但找不到

java - bluecove 是否适用于 Linux 64 位?

ios - 如何仅启动具有手机号码的联系人的 ABPeoplePickerNavigationController?

ios - 以编程方式编辑通讯簿的名字和姓氏

iphone - SDWebImage:防止许多服务器请求

ios - 在两个 NSDate 之间减去 1 分钟

ios - 如何将FB登录与我自己的服务器集成

ios - 为 64/32 位 iOS 编译

ios - 如何从 ABAddressBookRegisterExternalChangeCallback 获取更新的联系人列表?