我的应用程序有一个NSOperation,可以打开iphone地址簿,遍历用户的联系人,并将姓名和电话号码复制到核心数据实体中。我没有向地址簿写任何东西,所以我不确定这是怎么发生的。它不会抛出堆栈跟踪或应用程序崩溃。我只是在再次运行我的应用程序后才注意到它。我在日志中看到了以下内容...
CPSqliteStatementSendResults:文件已加密或不是数据库checkResultWithStatement:文件已加密或不是SELECT UID、identifier、(SELECT value FROM ABMultiValueLabel WHERE ROWID = label)、value FROM ABMultiValue WHERE record_id =?和property+0 = ?;
...and地址簿为空。
发布于 2011-12-02 10:12:25
这件事以前就发生在我身上。
您正在从两个不同的线程访问同一AB实例,而地址簿不是线程安全的。
您需要使用ABAddressBookCreate()来获取一个实例,以便在每个单独的线程上使用。
来自文档:Important: Instances of ABAddressBookRef cannot be used by multiple threads. Each thread must make its own instance.
你可以阅读更多关于它的here。
我已经确认,如果您从多个线程读取数据,数据库将会损坏,用户将失去他们所有的联系人。
https://stackoverflow.com/questions/8264919
复制相似问题