我的CoreData应用程序完全适用于iOS10,用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生成的。我试过删除模块和所有配置。任何人都知道如何使它工作?
答案 0 :(得分:3)
由于某种原因,NSSet是预期的,但您的NSManagedObject代码具有NSOrderedSet,它是NSObject的子类。尝试删除" Arrangment:Ordered"核心数据模型中的选中标记,并将这些关系重构为NSSet。 不知道为什么会在iOS 10中发生这种情况,但不会在iOS 9中发生。
P.S。也许你应该重新考虑你的核心数据模型?看起来你的开放/封闭问题会改变他们的状态。如果是这样,我建议使用closed
bool或status
int制作一个Question实体。
答案 1 :(得分:0)
我在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)
}
希望对其他人有帮助。