2016-01-10 2 views
0

Пожалуйста, научите меня, как настроить базовую модель данных для простого списка приложений.Как настроить базовую модель данных для простого списка приложений?

Я знаю, как сделать простой UITableView с источником данных из CoreData, но я не понимаю, что я должен делать, если у меня есть два TableViews: Look at the image

Первый [TableView] содержит папки, но второй [TableView] содержит список дел списки. Список должен отличаться для каждой папки.

Как создать такую ​​модель Core Data и как получить результат списка дел для каждой выбранной папки?

ответ

1

В принципе, вы создаете две модели данных, одну для папок, другую для todo.

В модели папки, установить связь с ToDo-модели (один-ко-многим, Обратнозависимым умелым, удалить правило: каскадный)

Использование 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) 
} 

Заселите результат NSFetchedResultsController для Tableview

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 
} 

Фот TODO Tableview, у вас есть только сдать объект в NSFetchedResultsCo ntroller результат, когда выполняют SEGUE:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    selectedFolder = self.fetchedResultsController.objectAtIndexPath(indexPath) as? Folder 
    self.performSegueWithIdentifier("todoView", sender: self) 
} 

операции Все CoreData, такие как удаление, создание, изменение .. вам нужно использовать NSManagedObjectContext. Поскольку у вас уже есть базовые знания об этом, я оставлю это вам

Надеюсь, что эта помощь

+0

Благодарим за отличный ответ. Также для меня возник вопрос о том, как добавить массив массивов объектов (списки дел) в Core Data, я обнаружил, что должен использовать отношения «многие ко многим». Теперь это работает. –

Смежные вопросы