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が繰り返されるのか?

