코어 데이터에 인스턴스를 추가하고 있습니다. 엔티티는 NSArrayController
으로 표시됩니다. 컨트롤러를 통해 새로 추가 된 인스턴스에 액세스하고 싶습니다.핵심 데이터 : NSManagedObject를 추가 한 직후 NSArrayController를 업데이트하는 방법?
A "기술"인스턴스가 추가되고 나서 다음과 같이 selectAddedObject
를 통해 액세스하려고 :
-(void)addSkill
{
[self selectAddedObject:[NSEntityDescription insertNewObjectForEntityForName:@"Skill"
inManagedObjectContext:self.managedObjectContext]];
}
- (void)selectAddedObject:(NSManagedObject *)addedMO
{
[self.sectionArrayController setSelectedObjects:[NSArray arrayWithObject:addedMO]];
NSLog(@"Selected: %@", [self.sectionArrayController valueForKey:@"selectedObjects"]);
}
이는 내가 첫 번째 라인으로
[self.managedObjectContext processPendingChanges];
을 추가 할 경우 작동하는 것 같다
selectAddedObject:
. 그러나 일단 그렇게하면 문서가 여전히 저장해야한다는 사실을 잊어 버리며 자동 추가 기능없이 앱을 종료 할 수 있습니다. 그것을 사용자에게 강요하고 싶지는 마십시오!
다른 방법으로 어레이 컨트롤러를 즉시 업데이트하는 방법에 대한 아이디어가 있습니까? 아니면 다른 방법으로 객체를 추가할까요? 몇 가지 초기 답변 (예 : Updating NSTableView when enitiy is added to core data)은 OSX의 변경으로 인해 오래된 것 같습니다.
감사합니다.
감사합니다. 매우 우아하게 보입니다. 나는이 해결책을 시도한 후에 문제가있다 :'self.sectionArrayController'는 커밋 후에도 변하지 않은 수의 객체를 가지고있다! 그러나 반환 값은'예'입니다. Hmmm .... – markjs
어레이 컨트롤러에서 (IB에서)'add :'를 사용하는 것만으로 인터페이스 빌더에서 "삽입 된 객체 선택"을 선택하지 않아도 새 객체를 선택하지 않습니다. – markjs
작동하는 것은'[self.managedObjectContext processPendingChanges];를 추가하는 것입니다. 나는 정말로없이하고 싶다. '-commitEditing'가 작동하지 않고'-processPendingChanges'가하는 이유가 있습니까? – markjs