簡體   English   中英

迅速-CoreData inManagedObjectContext為零

[英]swift - CoreData inManagedObjectContext is nil

我正在嘗試將數據保存到coredata,但是從insertIntoManagedObjectContext中收到“在展開可選值時意外發現nil”錯誤。 我仔細檢查了我的實體(Article),屬性(articleID,isFavorite)的命名。

但是我找不到錯誤的原因。

            func saveArticleAsFav(articleID: Int){

            let isFav = true

            let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
            let managedContext = appDelegate.managedObjectContext!


            let entity = NSEntityDescription.entityForName("Article", inManagedObjectContext: managedContext)

            // Error here:
            let item = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

            item.setValue(articleID, forKey: "articleID")
            item.setValue(isFav, forKey:"isFavorite")

            var error: NSError?
            if !managedContext.save(&error){
                println("Could not save \(error), \(error?.userInfo)")
            }

            articleLocalData.append(item)
            println(self.articleLocalData)

        }

編輯:我試圖初始化coredata:

import Foundation
import CoreData

class saveArticleAsFav {

    var articleLocalData = [NSManagedObject]()

    var context:NSManagedObjectContext


    init(context:NSManagedObjectContext) {
        self.context = context
    }

    func saveArticleAsFav(articleID: Int){

        let isFav = true
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext!

        let entity = NSEntityDescription.entityForName("Article", inManagedObjectContext: managedContext)
        let item = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

        item.setValue(articleID, forKey: "articleID")
        item.setValue(isFav, forKey:"isFavorite")

        var error: NSError?
        if !managedContext.save(&error){
            println("Could not save \(error), \(error?.userInfo)")
        }

        articleLocalData.append(item)
        println(self.articleLocalData)

    }
}

然后,我在郵件tableview中調用func:並收到以下錯誤:“無法使用類型為((articleID:Int)''的參數列表來調用類型為'saveArticleAsFav'的初始化程序”

saveArticleAsFav(articleID: articleID!)

唯一需要您強制打開的選項! 在違規行中是entity 因此,實體可能為nil

原因之一可能是模型中的實體名稱不是"Article"

我通常不使用實體,而是僅使用實體名稱通過Apple的便捷方法直接插入對象。

let item = NSEntityDescription.insertNewObjectForEntityForName(
           "Article", inManagedObjectContext: managedContext) as Article

如果名稱不正確或上下文無效,則此方法將失敗。

請注意,Swift編譯器並不總是能為您提供確切的原因。 可能是調用函數傳遞了無效的articleID

此外,您發布的代碼中存在一些嚴重的缺陷。 您的init方法意味着托管對象上下文是在其他地方創建的,並且該類需要使用有效的上下文進行初始化。 提供托管對象上下文似乎很麻煩。 您可以先忽略它,然后使用應用程序委托中的另一個上下文。

另外,您的類名看起來真的很像方法。 這應該是什么樣的課? 按照慣例,課程應以大寫字母開頭。

暫無
暫無

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

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