Swift:无法将’NSManagedObject_’类型的值转换为’dataModel.Entity’

Swift:无法将’NSManagedObject_’类型的值转换为’dataModel.Entity’,第1张

概述我真的不知道我要解释与否,如果需要,请不要犹豫,问我更多的代码或解释. 我正在尝试使用CoreData来存储从http POST请求获取的数据,然后在UITableView上打印它们. 我成功地从JSON获取数据并将它们发送到数据库.问题是当我尝试将数据从数据库发送到UITableView时. 这是我第一次使用Core Data,所以为了理解它是如何工作的,我已经按照本教程改编了我的情况:http 我真的不知道我要解释与否,如果需要,请不要犹豫,问我更多的代码或解释.
我正在尝试使用CoreData来存储从http POST请求获取的数据,然后在UItableVIEw上打印它们.

我成功地从JSON获取数据并将它们发送到数据库.问题是当我尝试将数据从数据库发送到UItableVIEw时.

这是我第一次使用Core Data,所以为了理解它是如何工作的,我已经按照本教程改编了我的情况:https://www.youtube.com/watch?v=UniafUWsvLg

这是我正在工作的实体:

import Foundationimport CoreDataclass Task: NSManagedobject {    @NSManaged var summary: String    @NSManaged var status: String    @NSManaged var responsable: String    @NSManaged var ID: String    @NSManaged var detail: String    @NSManaged var date: String    @NSManaged var context: String}

这是准备CoreData工作的代码的一部分,我对它有一些评论:

//Preparing variables used to get and send datas from DBlet context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedobjectContextvar nTask: Task? = nilvar frc : NSFetchedResultsController = NSFetchedResultsController()func getFetchedResultsController() -> NSFetchedResultsController{    frc = NSFetchedResultsController(fetchRequest: taskFetchRequest(),managedobjectContext: context!,sectionnameKeyPath: nil,cachename: nil)    return frc}func taskFetchRequest() -> NSFetchRequest {    //On which Entity are we working?    let fetchRequest = NSFetchRequest(entityname: "Task")    //Which attribute get the Order by. There summary as Ascending    let sortDescriptor = NSSortDescriptor(key: "summary",ascending: true)    fetchRequest.sortDescriptors = [sortDescriptor]    return fetchRequest}

现在我已经声明了这一点,我在vIEwDIDLoad上设置了getFetchedResultsController的委托给self:

overrIDe func vIEwDIDLoad() {    super.vIEwDIDLoad()    frc = getFetchedResultsController()    frc.delegate = self    frc.performFetch(nil)}

这是我创建数据库链接以从中获取数据的方法:

//link creation to sqlite DB        let context = self.context        let ent = NSEntityDescription.entityForname("Task",inManagedobjectContext: context!)        let nTask = Task(entity: ent!,insertIntoManagedobjectContext: context)

然后我用从JsON中提取的String填充我的nTask,我保存上下文并重新加载DataBase:

for dict in Json2 {    var apps = [String]()    if let summary = dict["summary"] as? String{        nTask.summary = summary    }    if let description = dict["description"] as? String{        nTask.detail = description    }    if let context = dict["context"] as? String{        nTask.context = context    }    if let due = dict["due"] as? String {        nTask.date = due    }    if let status = dict["status"] as? String{        nTask.status = status    }    if let responsible = dict["responsible"] as? String{        nTask.responsable = responsible    }    if let ID = dict["ID"] as? String{        nTask.ID = ID    }}context?.save(nil)println(nTask)self.tableVIEw.reloadData()

当我们使用tableVIEw时,我们必须声明cellForRowAtIndexPath和numberOfRowsInSection,它们是:

func tableVIEw(tableVIEw: UItableVIEw,cellForRowAtIndexPath indexPath: NSIndexPath) -> UItableVIEwCell {    var cell: UItableVIEwCell = self.tableVIEw.dequeueReusableCellWithIDentifIEr("customtableVIEwCell") as! UItableVIEwCell    let task = frc.objectAtIndexPath(indexPath) as! Task    cell.textLabel?.text = task.summary    var detail = task.detail    var context = task.context    var due = task.date    var status = task.status    var responsible = task.responsable    cell.detailTextLabel?.text = "Contexte: \(context),Detail: \(detail),Status: \(status),Ending date: \(due)"    return cell}func tableVIEw(tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {    let numberOfRowsInSection = frc.sections?[section].numberOfObjects    return numberOfRowsInSection!}

错误是行let task = frc.objectAtIndexPath(indexPath)为!我的cellForRowAtIndexPath上的任务.

完整的错误是:无法将’NSManagedobject_Task_'(0x79ebd190)类型的值转换为’TaskManager.Task'(0xa1f08).

我搜索了半天以上没有结果.我真的不明白发生在我身上的事情……

我很遗憾给出了这么多代码,但我不知道我在哪里或为什么会有这个错误,所以我必须尽可能地提供信息.

非常感谢您阅读到最后,感谢您的帮助.

问候.

编辑:

我通过做几件事终于解决了我的问题.我真的不知道哪一个解决了…我在我的Task类上添加了注释@objc(Task),在我的DataModel上我将类更改为Task,检查了我的NSManagedobjectModel是let modelURL = NSBundle.mainBundle().URLForResource (“TaskManager”,withExtension:“momd”)! AppDelegate上的url let url = self.applicationdocumentsDirectory.URLByAppendingPathComponent(“TaskManager.sqlite”)..

谢谢您的帮助.

解决方法 尝试:

let task = frc.objectAtIndexPath(indexPath) as NSManagedobject

也许你遇到的真正问题不是它的“cellForRowAtIndexPath”中的提取是在它的“FOR”中:

for dict in Json2 {...if let summary = Json2["summary"] as? String{    nTask.summary = summary}...

当你从“Json2”得到它时,它正在寻找“dict”的“摘要”

总结

以上是内存溢出为你收集整理的Swift:无法将’NSManagedObject_’类型的值转换为’dataModel.Entity’全部内容,希望文章能够帮你解决Swift:无法将’NSManagedObject_’类型的值转换为’dataModel.Entity’所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存