如何为简单的待办事项列表应用程序设置核心数据模型?

时间:2016-01-10 19:54:52

标签: ios swift core-data

请教我如何为简单的待办事项列表应用设置核心数据模型。

我知道如何使用来自UITableView的数据源制作简单的CoreData,但如果我有两个TableViews,我就不明白应该怎么做: Look at the image

首先[TableView]包含文件夹,但第二个[TableView]包含待办事项列表。每个文件夹的列表应该不同。

如何创建此类核心数据模型以及如何获取每个所选文件夹的待办事项列表结果?

1 个答案:

答案 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。既然你已经掌握了它的基本知识,我会留给你

希望这个帮助