删除所有对象后尝试保存托管上下文对象会导致应用程序崩溃

时间:2016-01-12 14:33:54

标签: ios iphone swift core-data

我试图在删除所有数据或在1个实体中保存新数据后保存托管上下文对象,但它导致应用程序在大约1%的情况下崩溃,但工作正常99%。

编辑:我无法调试,因为我在测试应用时没有发生崩溃,我们在应用中内置了崩溃报告工具,并报告了这些崩溃。

日志:

0  libobjc.A.dylib                0x237e3ae6 objc_msgSend + 5
1  CoreData                       0x25762193 -[NSManagedObject(_NSInternalMethods) _validatePropertiesWithError:] + 310
2  CoreData                       0x25762039 -[NSManagedObject(_NSInternalMethods) _validateForSave:] + 120
3  CoreData                       0x25761f97 -[NSManagedObject validateForInsert:] + 86
4  CoreData                       0x257615af -[NSManagedObjectContext(_NSInternalAdditions) _validateObjects:forOperation:error:exhaustive:forSave:] + 2362
5  CoreData                       0x25760b3b -[NSManagedObjectContext(_NSInternalAdditions) _validateChangesForSave:] + 154
6  CoreData                       0x25760867 -[NSManagedObjectContext(_NSInternalChangeProcessing) _prepareForPushChanges:] + 270
7  CoreData                       0x25754be1 -[NSManagedObjectContext save:] + 420

这是我的乐趣:

if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {

        let managedContext = appDelegate.managedObjectContext
        let myFetchRequest = NSFetchRequest(entityName: "MyEntity")

        do {
            if let myResults = try managedContext.executeFetchRequest(myFetchRequest) as? [MyEntity] {
                for myObject in myResults {
                    managedContext.deleteObject(myObject)
                }
            }
            try managedContext.save() // Most crashes at this line
            managedContext.reset()    // Some crashes at this line
        } catch {
        }
    }

婴儿这些随机崩溃发生在应用程序的多个位置,其中大多数是在尝试保存托管上下文对象时,还有一些是在执行managedcontext.reset()时。

所有崩溃都发生在iOS 9上。

PS-这是我第一次开发iOS开发和核心数据。我主要使用AppDelegate中Xcode添加的代码来处理Core Data。我只添加了一行:

let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
        NSInferMappingModelAutomaticallyOption: true]
    do {
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)
    }

0 个答案:

没有答案