尝试将谓词与关系对象一起使用时,“致命错误:在展开可选值时意外发现 nil”

Posted

技术标签:

【中文标题】尝试将谓词与关系对象一起使用时,“致命错误:在展开可选值时意外发现 nil”【英文标题】:"fatal error: unexpectedly found nil while unwrapping an Optional value" when trying to use predicate with a relationshipobject 【发布时间】:2015-07-10 21:08:19 【问题描述】:

我有 Tema、Oppgave 和 Fag 课程。一个 Fag 有很多 Oppgaves,一个 Tema 有很多 Oppgaves。但是,Tema 中的每个 Oppgave 都有相同的 Fag。

我只想显示其 Oppgaves 具有特定 Fag 的 Temas。

这些是我的相关模型:

class Oppgave: NSManagedObject 

    @NSManaged var isArchived: NSNumber
    @NSManaged var isComplete: NSNumber
    @NSManaged var lflink: String
    @NSManaged var link: String
    @NSManaged var nokkel: String
    @NSManaged var oppgaveNr: NSNumber
    @NSManaged var sett: Sett
    @NSManaged var tema: Tema
    @NSManaged var fag: Fag



class Tema: NSManagedObject 

    @NSManaged var title: String
    @NSManaged var oppgave: NSSet



class Fag: NSManagedObject 

    @NSManaged var title: String
    @NSManaged var fagKode: String
    @NSManaged var isUnlocked: NSNumber
    @NSManaged var oppgave: NSSet


这是我的获取请求:

    //This variable gets a value from a prepareForSegue function earlier
    var fag:Fag!

    var temaer:[Tema] = []
    var fetchResultController:NSFetchedResultsController!


    override func viewDidLoad() 
        super.viewDidLoad()

        println("Oppgaver fetches fra databasen")
        var fetchRequest = NSFetchRequest(entityName: "Tema")
        let sortDescriptor = NSSortDescriptor(key: "title", ascending: true)
        fetchRequest.sortDescriptors = [sortDescriptor]

        //This is the line thats giving me the error
        fetchRequest.predicate = NSPredicate(format: "oppgave.allObjects.first?.fag.fagKode == %@", fag.fagKode)




        if let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
            fetchResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
            fetchResultController.delegate = self

            var e:NSError?
            var result = fetchResultController.performFetch(&e)
            temaer = fetchResultController.fetchedObjects as! [Tema]


            if result != true
                println(e?.localizedDescription)
            
        

    

我怎样才能摆脱错误并检索我想要的对象?

【问题讨论】:

【参考方案1】:

由于相同的Tema 的所有Oppgave 具有相同的Fag,因此您的要求“其 Oppgaves 具有特定 Fag 的 Temas”等同于“其任何 Oppgaves 具有特定的 Temas Fag",其谓词为:

        fetchRequest.predicate = NSPredicate(format: "ANY oppgave.fag == %@", fag)

【讨论】:

以上是关于尝试将谓词与关系对象一起使用时,“致命错误:在展开可选值时意外发现 nil”的主要内容,如果未能解决你的问题,请参考以下文章

Swift-不断收到“致命错误:在展开可选值时意外发现 nil”

IBOutlet 变量在我尝试访问它们时返回 nil。错误:线程 1:致命错误:在展开可选值时意外发现 nil

使用 NSFileManager 检索多个值时收到“致命错误:在展开可选值时意外发现 nil”

Firebase 数据库 - 致命错误:在展开可选值时意外发现 nil

Swift:致命错误:在展开可选值时意外发现 nil

SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil