请教我如何为简单的待办事项列表应用设置核心数据模型。
我知道如何使用来自UITableView
的数据源制作简单的CoreData
,但如果我有两个TableViews
,我就不明白应该怎么做:
Look at the image
首先[TableView]
包含文件夹,但第二个[TableView]
包含待办事项列表。每个文件夹的列表应该不同。
如何创建此类核心数据模型以及如何获取每个所选文件夹的待办事项列表结果?
答案 0 :(得分:1)
基本上,您创建了两个数据模型,一个用于文件夹,另一个用于待办事项。
在文件夹模型中,设置与todo-model的关系(一对多,反向,删除规则:级联)
使用NSFetchedResultsController
从SQlite获取记录,它将是这样的:
let fetchRequset = NSFetchRequest(entityName: "Folder")
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
fetchRequset.sortDescriptors = [sortDescriptor]
self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequset, managedObjectContext: managedContext, sectionNameKeyPath: nil, cacheName: nil)
do {
try fetchedResultsController.performFetch()
} catch let error as NSError {
print(error.localizedDescription)
}
为您的tableView填充NSFetchedResultsController
的结果
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return (self.fetchedResultsController.sections?.count)!
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let sectionInfo = fetchedResultsController.sections![section]
return sectionInfo.numberOfObjects
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("folderTableViewCell", forIndexPath: indexPath) as! FolderTableViewCell
let folder = fetchedResultsController.objectAtIndexPath(indexPath) as! Folder
cell.folder = folder
return cell
}
Fot todo tableView,你只需要在执行segue时传递NSFetchedResultsController结果中的对象:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedFolder = self.fetchedResultsController.objectAtIndexPath(indexPath) as? Folder
self.performSegueWithIdentifier("todoView", sender: self)
}
所有coreData操作,如删除,创建,修改..您需要使用NSManagedObjectContext。既然你已经掌握了它的基本知识,我会留给你
希望这个帮助