[英]iOS - ManagedObjectContext is nil in swift CoreData
[英]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.