Skip to content

Instantly share code, notes, and snippets.

View groue's full-sized avatar

Gwendal Roué groue

View GitHub Profile
// MARK: - Navigation
extension PersonsViewController {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "NewPerson" {
let navigationController = segue.destinationViewController as! UINavigationController
let controller = navigationController.viewControllers.first as! PersonEditionViewController
controller.title = "New Person"
controller.person = Person(name: "", score: 0)
extension PersonEditionViewController {
func applyChanges() {
person.name = nameTextField.text
person.score = scoreTextField.text.flatMap { Int($0) } ?? 0
}
}
// MARK: - Form
extension PersonEditionViewController: UITextFieldDelegate {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
nameTextField.becomeFirstResponder()
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
import UIKit
class PersonEditionViewController: UITableViewController {
var person: Person!
@IBOutlet private weak var nameCell: UITableViewCell!
@IBOutlet private weak var nameTextField: UITextField!
@IBOutlet private weak var scoreCell: UITableViewCell!
@IBOutlet private weak var scoreTextField: UITextField!
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
// Delete the person
let person = personsController.recordAtIndexPath(indexPath)
try! person.delete(dbQueue)
}
// MARK: - FetchedRecordsControllerDelegate
extension PersonsViewController : FetchedRecordsControllerDelegate {
func controllerWillChangeRecords<T>(controller: FetchedRecordsController<T>) {
tableView.beginUpdates()
}
func controller<T>(controller: FetchedRecordsController<T>, didChangeRecord record: T, withEvent event:FetchedRecordsEvent) {
switch event {
func setupDatabase() {
// That "collation" helps us compare person names in a localized case insensitive fashion
let collation = DatabaseCollation.localizedCaseInsensitiveCompare
try! dbQueue.execute(
"CREATE TABLE persons (" +
"id INTEGER PRIMARY KEY, " +
"name TEXT NOT NULL COLLATE \(collation.name), " +
"score INTEGER NOT NULL " +
")")
// MARK: - UITableViewDataSource
extension FetchedRecordsControllerDemoViewController {
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return personsController.sections.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return personsController.sections[section].numberOfRecords
import UIKit
import GRDB
class PersonsViewController: UITableViewController {
var personsController: FetchedRecordsController<Person>!
override func viewDidLoad() {
super.viewDidLoad()
// The persons, sorted by score then by name
let person = Person(name: "Arthur", score: 100)
try person.insert(dbQueue)
let persons = Person.fetchAll(dbQueue) // [Persons]