gpt4 book ai didi

ios - swift - ManagedObjectContext 中的 CoreData 为零

转载 作者:行者123 更新时间:2023-11-30 14:17:21 26 4
gpt4 key购买 nike

我正在尝试将数据保存到 coredata,但我从 insertIntoManagedObjectContext 收到“在展开可选值时意外发现 nil”错误。我仔细检查我的实体(文章)、属性(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!)

最佳答案

在有问题的行中使用 ! 强制展开的唯一 optional 是 entity。由此可见,实体可能为nil

原因之一可能是模型中的实体名称不是“Article”

我通常不使用实体,而是直接使用Apple的便捷方法仅使用实体名称插入对象。

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

如果名称不正确或上下文无效,此方法将失败。

请注意,Swift 编译器并不总是给出确切的原因。调用函数可能传递了无效的 articleID

此外,您发布的代码存在一些严重缺陷。您的 init 方法意味着托管对象上下文是在其他地方创建的,并且该类需要使用有效的上下文进行初始化。这似乎是提供托管对象上下文的一种相当麻烦的方法。您可以忽略它并使用应用程序委托(delegate)中的另一个上下文来继续。

另外,你的类名看起来真的很像一个方法。这应该是一个什么样的类(class)?按照惯例,类应以大写字母开头。

关于ios - swift - ManagedObjectContext 中的 CoreData 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30962504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com