使用Swift从核心数据中获取数据

时间:2015-08-25 12:46:19

标签: ios swift core-data

我似乎无法做到这一点。我想从我的数据库中获取核心数据并在表格视图中显示所有数据。运行此选项仅在我的表上多次显示最后一个ID。有人可以告诉我我做错了什么和/或可能有帮助吗?感谢。

import Foundation
import CoreData

extension MyFavourites {

@NSManaged var id: String?

}

-

var myFavs : [MyFavourites]?

override func viewDidLoad() {
    super.viewDidLoad()

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext

    let freq = NSFetchRequest(entityName: "MyFavourites")
    freq.returnsObjectsAsFaults  = false

    do {
        myFavs = try context.executeFetchRequest(freq) as? [MyFavourites]
    } catch _ {
        myFavs = nil
    }

    tableView.reloadData()


}

-

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return (myFavs?.count)!
}

-

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

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

    if myFavs!.count > 0 {

        for result: AnyObject in myFavs! {

            if let favID: String = result.valueForKey("id") as? String {

                cell.textLabel?.text = favID                    
            }
        }
            } else {
        print("No Record")
    }
    return cell
}

1 个答案:

答案 0 :(得分:0)

如果我正确读取您的代码,它将在所有单元格中显示最后记录的favId。 cellForRowAtIndexPath会询问您当前单元格的值,但不是提供它,而是循环遍历所有单元格并重复分配相同的标签,并使用favID多次重写它。在循环结束时,标签将具有列表中的最后一个ID。

您需要移除循环,并为cell.label.text分配myFavs[indexPath.row]的ID值。