切换到swift 2后的coredata

时间:2015-07-31 14:52:16

标签: core-data swift2

我将我的代码优化为swift 2 现在我的核心数据无法正常工作。

我认为,我的entrie会保存,但我的tableview不会显示任何数据。 你能在下面的代码中找到任何错误吗?:

@IBOutlet weak var Table: UITableView!
@IBOutlet weak var name: UILabel!

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var lm = [LM_ITEMS]()

/*************** DATEN ABRUFEN ***************/
    func DatenAbrufen() {
        let fetchRequest = NSFetchRequest(entityName: "LM_ITEMS")
        let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
        fetchRequest.sortDescriptors = [sortDescriptor]

    do {
        try managedObjectContext.executeFetchRequest(fetchRequest) as? [LM_ITEMS]
    } catch { print("Error")}

    Table.reloadData()
}



override func viewWillAppear(animated: Bool) {
    self.DatenAbrufen()
}


/*************** ANZAHL DER ZELLEN ERMITTELN ***************/
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return lm.count
}


/*************** ZELLEN MIT INHALT FÜLLEN ***************/
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("lmCell") as! ModifyCells
    let LM_ITEM = lm[indexPath.row]

    cell.name.text = LM_ITEM.name
    return cell
}
}

2 个答案:

答案 0 :(得分:0)

是的,有些非常严重的问题。

DatenAbrufen执行获取请求,但不会将结果分配给任何内容。你打电话给executeFetchRequest但你没有对结果做任何事情。因此,结果会丢失,并且提取没有用处。

您将lm声明为数组,但您从未将任何内容放入数组中。所以它是空的,这意味着tableView(_:numberOfRowsInSection:)将始终返回0--因为lm.count将始终为0。

您可能希望将抓取结果放入lm

答案 1 :(得分:0)

您应该放弃使用数组来填充表格视图并使用NSFetchedResultsController API。查看Xcode模板。这是填充支持的核心数据UITableView的最佳方式。