簡體   English   中英

iOS9設備上的Swift3 CoreData崩潰

[英]Swift3 CoreData crash on iOS9 device

我有完全在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

我的配置:

enity的設置

類

模型

屬性擴展

所有類都是由Xcode生成的。 我試過刪除模塊和所有配置。 任何人都知道如何使它工作?

由於某種原因,NSSet是預期的,但您的NSManagedObject代碼具有NSOrderedSet,它是NSObject的子類。 嘗試刪除核心數據模型中的“Arrangment:Ordered”復選標記,並將這些關系重構為NSSet。 不知道為什么在iOS 10中會發生這種情況,但在iOS 9中卻沒有。

PS也許你應該重新考慮你的核心數據模型? 看起來你的開放/封閉問題會改變他們的狀態。 如果是這樣,我建議使用closed bool或status int制作一個Question實體。

我遇到了與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)
    }

希望它對其他人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM