【问题标题】:Swift3 CoreData crash on iOS9 deviceiOS9设备上的Swift3 CoreData崩溃
【发布时间】:2016-10-07 15:53:57
【问题描述】:

我有一个在 iOS10 上完美运行的 CoreData 应用程序,用 Swift3 编写,支持 iOS 8.4 及更高版本。

当我尝试在 iOS 9.3.5 上运行它时出现错误:

2016-10-07 17:47:20.596 FormApp[710:179733] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'

在线崩溃:

form.addToOpenQuestions(openQuestion)

我已将@objc() 添加到托管对象类中。然后我得到新的错误:

CoreData: warning: Unable to load class named 'FormApp.Form' for entity 'Form'.  Class not found, using default NSManagedObject instead.

在线上发生:

let form = NSEntityDescription.insertNewObject(forEntityName: "Form", into: managedObjectContext) as! Form

我的配置:

所有类都是由 Xcode 生成的。我试过删除模块和所有配置。有人知道如何使它工作吗?

【问题讨论】:

  • 你能设置一个异常断点并显示应用程序崩溃的确切行吗?在 xCode 中选择断点选项卡 -> 左下角的“+”按钮 -> 异常断点。另请出示 Form+CoreDataProperties.swift 文件
  • @alex 完成。添加屏幕和线条
  • 您的核心数据模型中是否有安排:有序复选标记?出于某种原因,它需要 NSSet,但是您的 NSManagedObject 代码具有 NSOrderedSet,它是 NSObject 的子类。尝试删除该复选标记并将这些关系重构为 NSSet
  • @alex 将其作为您的答案。作品。为什么它在 iOS10 上运行而不在 iOS9 上运行?他们在这个新版本中使 NSOrderedSet 成为 NSSet 的子类还是什么?

标签: ios core-data swift3 ios9.3


【解决方案1】:

由于某种原因,需要使用 NSSet,但是您的 NSManagedObject 代码具有 NSOrderedSet,它是 NSObject 的子类。尝试删除核心数据模型中的“排列:有序”复选标记,并将这些关系重构为 NSSet。 不知道为什么会在 iOS 10 中发生这种情况,但在 iOS 9 中却没有。

附:也许您应该重新考虑您的核心数据模型?看起来您的开放/封闭问题将改变它们的状态。如果是这样,我建议使用 closed bool 或 status int 创建一个 Question 实体。

【讨论】:

    【解决方案2】:

    我在使用 iOS 9.3 时遇到了同样的问题

    问题与上面@alex 提到的相同,我已解决如下

    if #available(iOS 11.0, *) {
            // use iOS 11-only feature
            YOUR_CLASS.insertIntoClosedQuestion(YOUR_OBJECT, at: index)
        } else {
            // handle older versions
            let orderset:NSMutableOrderedSet = Form.closeQuestion as! NSMutableOrderedSet
            orderset.insert(YOUR_OBJECT, at: index)
            YOUR_CLASS.addToClosedQuestion(orderset)
        }
    

    希望对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多