我将我的代码优化为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
}
}
答案 0 :(得分:0)
是的,有些非常严重的问题。
DatenAbrufen
执行获取请求,但不会将结果分配给任何内容。你打电话给executeFetchRequest
但你没有对结果做任何事情。因此,结果会丢失,并且提取没有用处。
您将lm
声明为数组,但您从未将任何内容放入数组中。所以它是空的,这意味着tableView(_:numberOfRowsInSection:)
将始终返回0--因为lm.count
将始终为0。
您可能希望将抓取结果放入lm
。
答案 1 :(得分:0)
您应该放弃使用数组来填充表格视图并使用NSFetchedResultsController
API。查看Xcode模板。这是填充支持的核心数据UITableView
的最佳方式。