Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift:无法将’NSManagedObject_’类型的值转换为’dataModel.Entity’大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我真的不知道我要解释与否,如果需要,请不要犹豫,问我更多的代码或解释. 我正在尝试使用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 Foundation
import CoreData

class 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 DB
let context = (UIApplication.sharedApplication().delegate as! AppDelegatE).managedObjectContext
var nTask: Task? = nil
var 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’所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。