Last active
March 28, 2020 09:07
-
-
Save JulesMoorhouse/24d59f36080f5756f9bbfc0b5010855b to your computer and use it in GitHub Desktop.
NSManagedObject Subclasses - Beginning Core Data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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