Skip to content

Instantly share code, notes, and snippets.

@JulesMoorhouse
Last active March 28, 2020 09:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JulesMoorhouse/24d59f36080f5756f9bbfc0b5010855b to your computer and use it in GitHub Desktop.
Save JulesMoorhouse/24d59f36080f5756f9bbfc0b5010855b to your computer and use it in GitHub Desktop.
NSManagedObject Subclasses - Beginning Core Data
PeopleTableViewController.swift
------
import UIKit
import CoreData
class PeopleTableViewController: UITableViewController {
var managedObjectContext: NSManagedObjectController!
var people = [NSManagedObject]()
override func viewDidLoad() {
super.viewDidLoad()
title = "People"
reloadData()
}
func reloadData() {
let fetchRequest = NSFetchRequest(entityName: "Person")
do {
let results = try managedObjectContext.
executeFetchRequest(fetchRequest) as? [NSManagedObject] {
people = results
}
} catch {
fatalError("There was an error fetching the list of people!")
}
}
}
DevicesTableViewController.swift
-----
import UIKit
import CoreData
class DevicesTabeViewController: UITableViewConroller {
var managedObjectContext: NSManagedObjectContext!
var devices = [Device]()
override func viewdDidLoad() {
super.viewDidLoad()
title = "Devices"
navigationItem.rightBarButtonItem = UIBarButtonItem
(barButtonSystemItem: .Add, target: self, action:
"addDevice:")
}
override func viewWillAppear(animated: Bool {
super.viewWillAppear(animated)
reloadData()
tableView.reloadData()
}
func reloadData() {
let fetchRequest = NSFetchRequest(entityName: "Device")
do {
if let results = try managedObjectContext,
executeFetchRequest(fetchRequest) as? [Device] {
devices = results
}
} catch {
fatalError("There was an error fetching the list of devices!")
}
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tablewView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) ->
UITableViewCell {
let cell =
tableVIew.dequeueResuableCellWithIdentifier("DeviceCell",
forIndexPath: indexPath)
let decice = decices[indexPath.row]
cell.textLabel?.text = device.name
cell.detailTextLabel?.text = device.deviceType
return cell
}
// MARK: - Actions & Segues
func addDevice(sender: AnyObject?) {
performSegueWithIdentifier("deviceDetail", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSeque, sender:
AnyObject? {
if let dest = segue.destinationViewController as?
DeviceDetailTableViewController {
???????
}
}
}
AppDelegate.swift
-----
import UIKit
import CoreData
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let fetchRequest = NSFetchRequest(entityName: "Device")
do {
let results = try managedObjectContext.executeFetchRequest(fetchRequest)
if results.count == 0 {
addTestData()
}
} catch {
fatalError("Error fetching data!")
}
if let tab = window?.rootViewController as?
UITabBarController {
for child in tab.viewControllers ?? [] {
if let child = child as? UINavigationController, top = child.topViewController {
if top.respondsToSelector("setManagedObjectContext:") {
top.performSelector("setManagedObjectContext", withObject: managedObjectContext)
}
}
}
}
return true
}
func addTestData() {
let managedObjectContext = persistentContainer.viewContext
// Reference to Core Data Device entity
guard let entity =
NSEntityDescription.entity(forEntityName: "Device", in: managedObjectContext) else {
fatalError("Could not find entry description!")
}
for i in 1...10 {
// Create an instance of the managed object and set properties into the context
let device = Device(entity: entity, insertInto: managedObjectContext)
// Add test data values
device.name = "Some Device #\(i)"
device.deviceType = (i % 3 == 0 ? "Watch" : "iPhone"
}
let bob = NSManagedObject(entity: personEntity, insertIntoManagedObjectContext: managedObjectContext)
bob.setValue("Bob", forKey: "name")
let jane = NSManagedObject(entity: personEntity, insertIntoManagedObjectContext: managedObjectContext)
jane.setValue("Jane", forKey: "name")
saveContext()
}
}
##### 6:03
MyDevices data model
Devices - same as code part 1
person - Name - String
Editor Menu - Create NSManagedObject SubClass - select only - mydevices - create both device + people
In generate class - remove question marks from deviceType + name + same for person
####### 8:04
- https://www.youtube.com/watch?v=62A-zAzc0aE&frags=wn
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment