ABAddressBook API在广泛使用应用程序后停止工作?

时间:2014-03-13 21:16:13

标签: ios iphone objective-c automatic-ref-counting abaddressbook

我正在开发一个使用ABAddressBook API列出用户通讯录中联系人的应用程序。当用户大量使用应用程序(进出视图控制器)时,ABAddressBook API会突然停止响应并抛出错误消息。

  

AB:无法编译查询语句   (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties):       SELECT ROWID,Name,ExternalIdentifier,Type,ConstraintsPath,ExternalModificationTag,ExternalSyncTag,AccountID,Enabled,SyncData,MeIdentifier,Capabilities FROM ABStore WHERE Enabled =?;

此外,在抛出此错误并且用户尝试导航到nib驱动的viewcontroller之后,应用程序崩溃并显示以下错误消息:

  

* 由于未捕获的异常终止应用' NSInternalInconsistencyException',原因:'无法在捆绑中加载NIB:' NSBundle(已加载)&#39 ;名称'同步'

这些错误只会在广泛使用后发生,这使我相信它存在某种内存问题。我已经注意到内存调试功能,内存在整个使用应用程序时累积,似乎超出常规但应用程序正在使用ARC,这意味着没有可以更改内存管理的内容 - 明智的。我非常感谢能够深入了解这个问题的根源以及如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

在我使用Address Book API的三个应用程序中,我多次遇到此问题。我通常尝试修复它是为了检查每次使用它时是否创建/保存ABAddressBookRef时出错。谷歌也存在这个问题。

要解决此问题,您需要获得通讯簿的权限。您似乎已经这样做了,否则什么都行不通,只是为了查看您的代码,请查看Programmatically Request Access to Contacts

第二个错误可能与第一个错误有关 - 也就是说,如果你能摆脱第一个错误,那么第二个错误就会消失。最好的解决方案是尽可能少地调用通讯簿 - 也许每次应用加载一次?否则,此错误将继续回来。您拨打ABAddressBookCreateWithOptions的次数越多,您就越可能看到错误。

希望这足以防止这些错误发生。