1

我正在開發一個應用程序,它使用ABAddressBook API來列出用戶地址簿中的聯繫人。當用戶大量使用應用程序(進出視圖控制器)時,ABAddressBook API將突然停止響應並引發錯誤消息。ABAddressBook API在廣泛使用應用程序後停止工作?

AB:無法編譯語句查詢 (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties): SELECT ROWID,名稱,ExternalIdentifier,類型,ConstraintsPath,ExternalModificationTag,ExternalSyncTag,帳戶ID,啓用,SyncData,MeIdentifier從ABStore功能啓用該功能=? ;

此外,在此之後錯誤已被拋出並在用戶嘗試導航到筆尖供電的ViewController,應用程序崩潰與以下錯誤消息:由於未捕獲

*終止應用程序例外「NSInternalInconsistencyException」,理由是:「不能在包中加載NIB:‘一個NSBundle(加載)’名爲'同步」

這兩種錯誤只有廣泛使用,導致我相信以後會發生這是某種記憶問題。我已經注意到內存調試功能,內存積累使用應用程序似乎超出了規範,但應用程序正在使用ARC,這意味着沒有很多可以改變內存管理方式。我非常感謝進一步瞭解這個問題的根源以及如何解決這個問題。

+0

如果你從谷歌搜索來到這裏,並且在iOS 9中使用新的CNContactStore框架,請在這裏查看我的答案:http://stackoverflow.com/a/36506216/52680 –

回答

1

在我使用地址簿API的三個應用程序中,我遇到過幾次這個問題。我通常嘗試修復它的方法是檢查每次使用它時是否創建/保存ABAddressBookRef時發生錯誤。這個問題也遍及谷歌。

爲了解決這個問題,您需要獲得通訊錄的權限。看起來你已經做到了,否則什麼都不會起作用,只是爲了檢查你的代碼,看看Programmatically Request Access to Contacts

第二個錯誤可能與第一個錯誤有關 - 也就是說,如果您可以擺脫第一個錯誤,那麼第二個錯誤將會消失。最好的解決方案是儘可能少地撥打地址簿 - 也許每次應用程序加載一次?否則,這個錯誤會繼續回來。您撥打ABAddressBookCreateWithOptions的次數越多,您就越有可能看到錯誤。

希望這足以讓您防止發生這些錯誤。