2009-12-29 1 views
0

작은 코어 데이터 앱이 있습니다. NSObjectController 뷰와 모델 사이의 바인딩 역할을하는 하위 클래스와 사용자가 입력 할 뷰의 NSTextField가 있습니다.NSObjectController - setAutomaticallyPreparesContent :

서브 클래 싱 된 NSObjectController, 컨트롤러 키를 "content"로 설정하고 모델 키 경로를 내 엔터티의 속성으로 바인딩하기 때문에 텍스트 필드를 편집 할 수 있습니다.

일부 텍스트를 입력하는 경우 파일을 저장하고 다시 열면 NSTextField 텍스트가 없습니다.

테스트를 위해 컨트롤러의 add : 선택기에 연결된 버튼이 있으며 모든 버튼을 누르면 NSTextField에 텍스트를 입력하고 문서를 저장할 수 있으며 다시 열 수 있습니다.

펜촉을로드 할 때 개체를 어떻게 준비합니까?

[self setAutomaticallyPreparesContent:YES]; 

을 한 후 나는 MyDocument에있다 : 다음 NSObjectController 내 서브 클래스 내 init 메소드에서

내가 가진

[oc fetchWithRequest:nil merge:NO error:&error]; 
: windowControllerDidLoadNib (OC는 IB에서 서브 클래 싱 objectcontroller에 함께 IBOutlet입니다)

하지만 작동하지 않았습니다. 사용자가 입력을 시작할 수 있도록 콘텐츠를 만들어야합니다.

감사합니다.

+0

OK, 내가 읽고 있어요 및 읽기, 아직 그것을 가지고 있지는 않지만 내 NSObjectController의 새 인스턴스를 만든 다음 내 managedObjectContext에 추가해야한다고 생각합니다. 그러나 기존 문서의 경우 MyDocument가 NSPersistantDocument에서 개체 컨트롤러를 만들 것이라고 가정합니다. 올바른 방향으로 가고 있습니까? – Mark

답변

0

좋아, 여기까지 저의 공헌입니다. 나는 무언가에 대답 할 수있어서 행복하다! 문서의 "NSPersistentDocument 핵심 데이터 자습서"에서이 내용을 발견했습니다.

내 문제는 문서가 만들어 질 때 NSManagedObject를 만들고 싶다는 사실을 기억하십시오. 그런 식으로 사용자는 "추가"버튼을 누를 필요가 없습니다. 나는 문서가 더러워지기를 원하지 않는다. (사용자가 무언가를 입력 할 때까지) 저장된 파일을 열면 내용을 바꾸고 싶지 않다. 이 작업은 새 문서가 만들어 질 때만 수행해야합니다.

initWithType:error: 

이것을 달성 :

NSDocument는 방법을 제공한다.

1)은 managedObjectContext,

2) 잠시 취소 해제를 잡아. 이렇게하면 문서가 더러워 지거나 사용자가 엔터티의 생성 및 삽입을 취소하는 것을 방지 할 수 있습니다. 여기에

코드의 실행 취소 다시 설정) 변경

5 설치)

4 inManagedObjectContext

:

3) insertNewObejctForEntityForName를 사용

- (id)initWithType:(NSString *)typeName error:(NSError **)outError 
{ 
    self = [super initWithType:typeName error:outError]; 
    if (self != nil) { 
     NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 

     [[managedObjectContext undoManager] disableUndoRegistration]; 

     self.myManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"myEntityName" 
                 inManagedObjectContext:managedObjectContext]; 

     [managedObjectContext processPendingChanges]; 

     [[managedObjectContext undoManager] enableUndoRegistration]; 
     NSLog(@"initWithType"); 
    } 
    return self; 
}