ios - Swift - 将核心数据检索到自定义单元格

标签 ios uitableview core-data swift

我正在尝试检索核心数据并将其显示在自定义单元格类中。我认为如果我先展示我的代码会更容易。

这是我的“原始代码”,带有一个常规单元格:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let CellID:NSString = "cell"

    var cell: UITableViewCell = self.tv.dequeueReusableCellWithIdentifier(CellID) as UITableViewCell

    if let ip = indexPath as Optional {

        var data:NSManagedObject = myList[ip.row] as NSManagedObject

        cell.textLabel!.text = data.valueForKeyPath("username") as String!
    }

    return cell
}

这是我在尝试使用自定义单元格时将代码更改为:

   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let CellID:NSString = "cell"

        var cell: CustomCell = tv.dequeueReusableCellWithIdentifier(CellID) as CustomCell

        if let ip = indexPath as Optional {

            var data:NSManagedObject = myList[ip.row] as NSManagedObject

            cell.titleLabel.text = data.valueForKeyPath("username") as String!
            cell.dateLabel.text = data.valueForKeyPath("date") as String!
        }

        return cell
    }

第一个代码运行良好,但在使用第二个代码时出现 (lldb) 运行时错误。

“用户名”和“日期”都保存为字符串。

如有任何建议,我们将不胜感激。

编辑:

附加信息:

var myList: Array<AnyObject> = []

弹出的错误只是“(lldb)”和“Thread 1: EXC_BREAKPOINT (code = EXC_l386_BPT, subcode = 0x0)”。

我的模型文件:

@objc(Model)
class Model: NSManagedObject {

    @NSManaged var username: String
    @NSManaged var date: String
    @NSManaged var isAnonymousMessage: Bool

}

我的 cellForRowAtIndexPath 函数:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let CellID:NSString = "cell"

    var cell: CustomCell = tv.dequeueReusableCellWithIdentifier(CellID) as CustomCell

    if let ip = indexPath as Optional {

        let data = myList[indexPath.row] as Model

        cell.titleLabel.text = data.username
        cell.dateLabel.text = data.date
    }


    return cell
}

我的 viewDidAppear 函数:

override func viewDidAppear(animated: Bool) {

    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext!
    let freq = NSFetchRequest(entityName: "Message")
    let en = NSEntityDescription.entityForName("Message", inManagedObjectContext: context)

    let fetchRequest = NSFetchRequest(entityName: "Message")

    myList = context.executeFetchRequest(fetchRequest, error: nil) as [Model]


    tv.reloadData()

}

我的 CustomCell 类如下所示:

import UIKit

class CustomCell: UITableViewCell {

    @IBOutlet weak var titleLabel: UILabel!

    @IBOutlet weak var dateLabel: UILabel!



    override func awakeFromNib() {
        super.awakeFromNib()



        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

最佳答案

我建议稍微更改一下您的代码。

将 NSManagedObjects 加载到核心数据类的数组中,例如:

 var myList = [ListObject]() // Where ListObject is your NSManagedClass

 let fetchRequest = NSFetchRequest(entityName: "List")
 myList = context.executeFetchRequest(fetchRequest, error: nil) as [ListObject]

// You should load this once (maybe in ViewDidLoad) so every Core Data object gets only fetched   once (you could easy refresh this if needed).

然后在您的 cellForRowAtIndexPath 中使用:

let data = myList[indexPath.row] as ListObject

cell.titleLabel.text = data.name
cell.dateLabel.text = data.date

// You dont need to use "valueForKeyPath" - just use the property as shown above.

关于ios - Swift - 将核心数据检索到自定义单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688175/

相关文章:

ios - TableView 出队单元的问题

iphone - 如何将预先存在的 sqlite 文件导入核心数据?

objective-c - NSFetchedRequestController,其中NSSet属性为sectionNameKeyPath。可能吗?

ios - xcode 选项卡栏 Controller 使用代码更改所选项目

ios - 使用 UIDocumentBrowserViewControllerDelegate 创建新文档(来自基于文档的应用程序模板)

swift - 在 UITableView 中使用 CustomStringConvertible

objective-c - 将 mod_wsgi 与 Apache 一起使用时无法导入 PyObjC CoreData 模块

iphone - 用代码更新应用

ios - Swift 中的选项集交集

ios - iPhone应用程序断开连接后如何知道互联网变为事件状态