
CoreData는 실행 취소와 다시 실행을 지원한다. 이와 관련된 메서드는 NSManagedObjectContext에 포함되어 있다. 컨텍스트란? NSManagedObjectContext는 CoreData의 컨텍스트를 의미한다. 컨텍스트는 실제 저장소의 데이터가 아닌 저장소의 데이터를 불러와(fetch) 임시로 메모리에 올려서 사용하는 장소라고 생각하면된다. 따라서 컨텍스트에 데이터를 추가하거나 저장소에서 불러온 데이터를 수정하고 삭제하여도 실제 저장소에 영향을 주지 않는다. save()를 호출해야 컨텍스트의 내용이 실제 저장소에 반영된다. 실행 취소와 다시 실행 관련 메서드 컨텍스트에는 실행 취소와 다시 실행과 관련하여 다음 메서드를 제공한다. undo() : 실행을 취소한다. (save도 취소할 수 ..

Swift는 인스턴스 변수가 다 초기화되지 않으면 인스턴스 변수를 사용할 수 없다. 예를 들어, 다음과 같이 groupName 인스턴스 변수를 이용해서 predicate를 만들게 되면 에러가 발생한다. struct ItemListView: View { @Environment(\.managedObjectContext) private var viewContext @State private var isShowingNewItemSheet = false @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \Item.name, ascending: true)], predicate: NSPredicate(format: "itemGroup.name == %@", gr..