2015-06-21 66 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