【发布时间】:2015-04-05 01:30:58
【问题描述】:
我今天下午有一个奇怪的经历,我无法确定问题可能是什么。我一直在使用 Swift 开发一个 iPhone 应用程序,今天我把它拿出来进行测试。到目前为止,我只在连接到 Mac 时对其进行了测试。
当用户开车时,应用程序会跟踪位置并将其保存到 Core Data。一切都很好,数据正在保存。直到手机崩溃并且核心数据似乎已经清空。在手机崩溃之前,数据肯定已被保存,因为我将保存的路线覆盖在地图视图上,并且它肯定正在显示。而且删除数据的函数肯定没有被调用,因为我没有访问调用它的唯一视图控制器。
我的问题是,是否有其他人遇到过这种情况,或者是否存在已知问题,即如果手机崩溃,Core Data 可以被删除?
编辑:
这是我用来保存到 Core Data 的代码:
var context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
var savePosition = NSEntityDescription.insertNewObjectForEntityForName("Positions", inManagedObjectContext: context) as Positions
savePosition.poi = false
savePosition.time = currentTime
savePosition.direction = currentDirection
savePosition.latitude = currentLatitude
savePosition.longitude = currentLongitude
savePosition.game = currentGame
context.save(nil)
我错过了一步吗?
【问题讨论】:
-
数据已缓存,您可以毫无问题地使用它。但是只有在调用
saveContext()时才会保存到持久化数据存储中 -
当您说已保存时,您的意思是保存到我假设的持久存储中,但是什么样的存储?保存的数据在崩溃中丢失绝对不正常。我根本没见过。同意上面,听起来像 saveContext 没有发生。
-
我已经添加了我的代码。我错过了 saveContext() 吗?我认为我的 context.save() 正在做这项工作?
-
将
nil作为错误对象传递给save(),您就没有机会发现可能的错误... -
我不擅长跟踪我的错误!我刚刚开始,这是我需要努力的(许多)领域之一。但是那个 context.save() 应该和 saveContext() 做同样的保存工作?