迭代iPhone Addressbook导致地址簿sql db损坏

问题描述 投票:4回答:1

我的应用程序有一个NSOperation,可以打开iphone地址簿,遍历用户的联系人,并将名称和电话号码复制到Core Data实体中。大部分时间这都没有问题,但很少看起来地址簿被破坏,所有联系人都丢失了。我没有写任何写入地址簿,所以不确定这是怎么发生的。它不会抛出堆栈跟踪或崩溃应用程序。我再次运行我的应用程序后才注意到它。我在日志中看到以下内容......

CPSqliteStatementSendResults:文件是加密的还是不是数据库checkResultWithStatement:文件是加密的还是不是SELECT UID的数据库,标识符,(SELECT值FROM ABMultiValueLabel WHERE ROWID = label),值FROM ABMultiValue WHERE record_id =? AND property + 0 =?;

......而且地址簿是空的。

是否可以通过阅读或不正确地关闭地址簿来删除地址簿?

ios sqlite abaddressbook
1个回答
3
投票

这件事发生在我之前。

您正在从两个不同的线程访问相同的AB实例,并且通讯簿不是线程安全的。

您需要使用ABAddressBook Create()来获取要在每个单独线程上使用的实例。

从文档:Important: Instances of ABAddressBookRef cannot be used by multiple threads. Each thread must make its own instance.

你可以阅读更多关于它here

我已经确认,如果您从多个线程读取,数据库将损坏,用户将失去所有联系人。

© www.soinside.com 2019 - 2024. All rights reserved.