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

Ios 广泛使用应用程序后,ABAddressBook API停止工作?,ios,iphone,objective-c,automatic-ref-counting,abaddressbook,Ios,Iphone,Objective C,Automatic Ref Counting,Abaddressbook,我正在开发一个应用程序,它使用ABAddressBookAPI列出用户通讯簿中的联系人。当用户经常使用应用程序时(进出视图控制器),ABAddressBook API会突然停止响应,并抛出错误消息 AB:无法为查询编译语句 (ABCCopyArrayFallInstances类别资源属性): 选择ROWID、Name、ExternalIdentifier、Type、ConstraintsPath、ExternalModificationTag、ExternalSyncTag、AccountID、

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

AB:无法为查询编译语句 (ABCCopyArrayFallInstances类别资源属性): 选择ROWID、Name、ExternalIdentifier、Type、ConstraintsPath、ExternalModificationTag、ExternalSyncTag、AccountID、Enabled、SyncData、MeIdentifier、Absore中的功能,其中Enabled=

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

*由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在名为“Sync”的捆绑包:“NSBundle(loaded)”中加载NIB”


这两个错误只有在大量使用之后才会发生,这让我相信这是某种内存问题。我注意到,通过内存调试功能,在使用应用程序的过程中内存会累积,这似乎超出了标准,但应用程序使用的是ARC,这意味着在内存管理方面没有太多可以更改的内容。我非常希望能够深入了解这个问题的根源以及解决方法。

在我使用通讯录API的三个应用程序中,我已经多次遇到这个问题。我通常尝试修复它的方法是检查每次使用ABAddressBookRef时是否创建/保存ABAddressBookRef时出错。这个问题也在谷歌身上到处都是

要解决此问题,您需要对通讯簿的权限。看起来您已经这样做了,否则什么都不起作用,只是为了检查您的代码,看看

第二个错误可能与第一个错误有关——也就是说,如果你能摆脱第一个错误,第二个错误就会消失。最好的解决方案是尽可能少地拨打地址簿的电话——也许每次应用程序加载一次?否则,此错误将继续出现。调用
ABAddressBookCreateWithOptions
的次数越多,就越可能看到错误


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

如果您是通过谷歌搜索来到这里的,并且正在使用iOS 9中新的CNContactStore框架,请参见我的回答: