2015-06-21 43 views
0

我試圖將數據保存到coredata,但我從insertIntoManagedObjectContext中「意外地發現了零,同時展開一個可選值」錯誤。 我仔細檢查了我的實體(文章),屬性(articleID,isFavorite)的命名。swift - CoreData inManagedObjectContext爲零

但我找不到錯誤的原因。

  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:並得到了以下錯誤:與 「無法調用初始化類型‘saveArticleAsFav’類型「(條款ArticleID:智力)」的參數列表」

saveArticleAsFav(articleID: articleID!) 
+0

請不要覆蓋您之前的問題。否則其他人將無法理解答案。 – Mundi

回答

0

唯一可選的你是力有問題符合!展開爲entity。因此,實體可能是nil

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

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

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

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

請注意,Swift編譯器並不總是給你確切的原因。這可能是調用函數傳遞了一個無效articleID

此外,您在發佈的代碼中存在一些嚴重缺陷。你的init方法意味着管理對象上下文是在其他地方創建的,並且該類需要使用有效的上下文進行初始化。這似乎是一種非常麻煩的方式來提供託管對象上下文。您繼續忽略它並使用應用程序委託中的另一個上下文。

此外,您的班級名稱看起來非常像一種方法。這應該是什麼類?按照慣例,課程應以大寫字母開頭。

+0

謝謝@Mundi。正如你所提到的那樣,我重寫了這個類。請參閱我的編輯。但是這一次我卡在其他地方...... –

+0

這是由上面提到的「嚴重缺陷」造成的。如果你不能區分功能和類,我會強烈建議你先做一些基本的教程。現在的問題實際上是一個不同的問題,所以你應該接受這個答案併發佈一個新問題。 – Mundi