ios - ABAddressBook API 在大量使用该应用程序后停止工作?

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

我正在开发一个应用程序,它使用 ABAddressBook API 列出用户地址簿中的联系人。当用户大量使用该应用程序(进出 View Controller )时,ABAddressBook API 突然停止响应并抛出一条错误消息。

AB: Could not compile statement for query (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties): SELECT ROWID, Name, ExternalIdentifier, Type, ConstraintsPath, ExternalModificationTag, ExternalSyncTag, AccountID, Enabled, SyncData, MeIdentifier, Capabilities FROM ABStore WHERE Enabled = ?;

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

* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle (loaded)' with name 'Sync''

这两个错误仅在广泛使用后才会发生,这让我相信这是某种内存问题。我注意到内存调试功能在整个使用应用程序的过程中内存不断累积,这似乎不正常,但该应用程序使用的是 ARC,这意味着在内存管理方面没有太多可以更改的地方。如果能进一步了解这个问题的根源以及解决方法,我将不胜感激。

最佳答案

在我使用地址簿 API 的三个应用程序中,我多次遇到这个问题。我通常尝试修复它的方法是检查每次使用它时创建/保存 ABAddressBookRef 是否有错误。这个问题也遍布谷歌。

为了解决这个问题,您需要获得地址簿的权限。看来你已经这样做了,否则什么都行不通,只是为了检查你的代码,看看 Programmatically Request Access to Contacts .

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

希望这足以让您避免这些错误的发生。

关于ios - ABAddressBook API 在大量使用该应用程序后停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22391078/

相关文章:

ios - 在 tableviewheader 中使用 UITextField 进行 self.view.endEditing 时崩溃

ios - UICollectionView 单元格之间的距离不变

ios - WatchKit:如何将GLANCE INTERFACE带到 watch 显示屏上?

objective-c - Objective-C : NSError in initialiser

ios - 如何在不更改原始内容的情况下操作 NSDictionary 内容的副本

android - 设置 phonegap 多平台项目存储库的最佳方式

c# - Objective C 中的 UIImage 到十六进制转换

iphone - 键盘中的空格按钮替换 UITextview 中的字符 - iOS (Obj-C)

iphone - 如何在iPhone上指定具有不同左右大写尺寸的可拉伸(stretch)图像

iphone - Apple 应用程序加载器控制台