override func viewDidLoad() { super.viewDidLoad() let appDelegate = UIApplication.shared.delegate as! AppDelegate let context = appDelegate.persistentContainer.viewContext let entity = NSEntityDescription.entity(forEntityName: "Users", in: context) let newUser = NSManagedObject(entity: entity!, insertInto: context) newUser.setValue("Louis Miguel", forKey: "username") newUser.setValue("asdf", forKey: "password") newUser.setValue("1", forKey: "age") do { try context.save() } catch { print("Failed saving") } let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") // request.predicate = NSPredicate(format: "age = %@", "12") request.returnsObjectsAsFaults = false do { let result = try context.fetch(request) for data in result as! [NSManagedObject] { print(data.value(forKey: "username")) } } catch { print("Failed") } }
「View」メニューの「Debug Area」から「Activate Console」でconsoleを表示します。
consoleにfetchしたデータが表示されています。
optionalと出ていますね。
オプショナル型とは変数にnilの代入を許容するデータ型で、反対に非オプショナル型はnilを代入できない。オプショナル型の変数にはデータ型の最後に「?」か「!」をつける。
usernameの箇所をprint(data.value(forKey: “password”))と変更します。
insertしたpasswordがfetchされ、表示されます。
しかし、何故printが繰り返されるのか?