我有一个基于位置的应用程序,每1秒获取一次位置,并一次将一批位置保存到CoreData DB,以免使位置数组太大。但是,由于某种原因,即使我在SERIAL QUEUE上使用dispatch_async,它也会因EXC_BAD_ACCESS而崩溃:
创建了一个全局串行自定义队列,如下所示:
var MyCustomQueue : dispatch_queue_t =
dispatch_queue_create("uniqueID.for.custom.queue", DISPATCH_QUEUE_SERIAL);
在didUpdateToLocation协议函数中,如果批量大小超过预设数量,我有一些代码可以将最新一批CLLocation项目保存到磁盘上:
if(myLocations.count == MAX_LOCATIONS_BUFFER)
{
dispatch_async(MyCustomQueue)
{
for myLocation in self.myLocations
{
// the next line is where it crashes with EXC_BAD_ACCESS
newLocation = NSEntityDescription.insertNewObjectForEntityForName(locationEntityName, inManagedObjectContext: context as NSManagedObjectContext) ;
newLocation.setValue(..)
// all the code to set the attributes
}
appDelegate.saveContext();
dispatch_async(dispatch_get_main_queue()) {
// once the latest batch is saved, empty the in-memory array
self.myLocations = [];
}
}
}
神秘之处在于,即使你使用dispatch_async(它只是让执行与MAIN线程同时执行,也不会触及SQLite数据)?
备注:
答案 0 :(得分:0)
您可以查看此链接。您的问题可能是因为当您尝试将项目插入其中时没有MOC。
Core Data : inserting Objects crashed in global queue [ARC - iPhone simulator 6.1]