어떻게 만들 수 있습니 마스터 세부 사항 인터페이스의 핵심 데이터 및 추상적인 entity?

StackOverflow https://stackoverflow.com/questions/1811454

문제

애플은 좋은 작은 튜토리얼을 만들기 위한 간단한 마스터 세부 사항 인터페이스입니다.인터페이스 빌더는 자동으로 생성 중 하나에서 당신에게 핵심 데이터 entity.그러나 나는 뭔가를 시도하고 더 복잡한 보다 간단한 예제는 잠시 동안 그것을 얻을 작동합니다.

나는 핵심 데이터는 문서의 기반 응용 프로그램입니다.모델을 포함한 추상적인 엔터티 페이지,그리고 여러 가지 콘크리트 subentities 의 페이지입니다.모든 페이지를 일부 공통의 속성(예"이름")과 그 정의에 대한 정보를 볼 수 있습니다.물론,subentities 특성을 갖는 고유한다.

내가 원하는 인터페이스 사용자를 허용하는 모든 종류의 페이지에서 마스터 목록(는 NSTableView).를 선택할 때 페이지의 세부 사항을 필드 표시되는가에 따라 달라 어떤 종류의 페이지의 그것입니다.

여기에 나는 지금:

나는 주요 펜촉 파일 목록이 표시됩니다,플러스 모두 필드를 일반적인 페이지.가 빻은 각 페이지에 대한 유형으로 그것의 특정한 필드가 있습니다.가의 주요 NSArrayController 에서 주요 펜촉하는 파일을 채우 NSTableView.가 NSArrayController 에서 각각의 페이지의 특정 빻뿐만 아니라 할 수 있도록 묶 세부 분야는 특성의 현재를 선택합니다.내 모든 NSArrayControllers 구성된 동일하게,그리고 나는 그들이 모인 managedObjectContext 과 같은 selectionIndexes.

내가 사용하고 아론 Hillegass 의 방법이 보를 교환하는 그에 대해 설명합에서 자신의 코코아 책이다.그래서 등록에 대한 NSTableViewSelectionDidChangeNotifications,과가 나타날 때 하나를 호출하는 방법 switchView:

switchView 에서 보이는 현재 선택된 오브젝트 검사는 유형의 페이지에 그것은,그리고 스왑에서 적절한 펜촉에 따라 파일 Hillegass 의 방법입니다.

모든 것이 잘 작동하는 경우 나는 단지 하나의 유형이지만,곧 나를 추가 페이지의 두번째 형식,내가 이 오류가 발생할 수 있습니다.

오류가 설정치를 위해 핵심 경로 selectionIndexes 의체(에서 개체 entity:페이지 번호 선택된 객체:1):[valueForUndefinedKey:]:엔터티 NoColPage 지 않는 키 값을 코딩을 준수에 대한 핵심 측면이다.

의 마지막 부분에 오류가 의미가 있습니다:그것은 갇혀를 표시하려는 잘못된 빻은,그래서 그것은 바인딩하려고 하는 필드를 존재하지 않는 이것에 대한 개체입니다.

추가 selectionIndexes 필드를 MyDocument 그래서 나의 모든 NSArrayControllers 수 바인딩은 동일한 장소입니다.내가 고민이 일고 나는 그것을 알아낼 수 없습니다.어떤 아이디어가?

는 경우에 그것은, 여기에 샘플 프로젝트를 다운로드할 수 있습니다.나만을 추출한 것이 이 문제와 관련 내에서 프로젝트로 새로운 더미 응용 프로그램,내가 사용하여 테스트하고입니다.

PS:인터페이스 빌더를 생성하기 위한 도구를 마스터 세부 사항에서 인터페이스의 핵심 데이터 entity 작동하지 않아 나는 그것을 원한 추상적인 요소.그것은 단지 생성 분야의 특성에 대한 superentitity.

편집: 내가 생각하는 여호수아에게 무언가를,그러나 불행하게도,그것은 작동하지 않습니다-나는 계속으로 달리는 동일한 문제입니다.처음에는 내가 수고 하지 않았기 때문에 이해하는 것-해제:예상하는 문자열을 일정하지 않은 핵심 경로입니다.

나는 몇 가지를 시도했 변:어디를 추적의 현재 표시되고 있는 펜의 배열 컨트롤러어디를 추적의 현재 표시되는 페이지 입력 및만 해제/셋팅할 때 나를 표시하려는 다른 페이지로입니다.

여기에 관련 부분의 코드입니다.

-(void) displayViewController: (ManagingVC *) vc withClass:(NSString*) className {

//Try to end editing
NSWindow *w = [box window];
BOOL ended = [w makeFirstResponder:w];
if (!ended) {
    NSBeep();
    return;
}

//The Managing View Controller's NSArrayController
NSArrayController* vcAc = [vc arrCont];

//if the page we're trying to switch to is NOT the same type as the current page we're displaying
//if it is, do nothing.
if (![currPageDisplayed isEqual:className]) {

    //unbind the old view controller
    ManagingVC *oldvc = [viewControllers objectForKey:className];
    NSArrayController* oldsac = [oldvc arrCont];
    [oldsac unbind:@"selectionIndexes"];

    //bind the new view controller
    [vcAc bind:@"selectionIndexes" toObject:self withKeyPath:@"selectionIndexes" options:nil];
    currPageDisplayed = className;

    NSView *v = [vc view];

    //display the new view in an NSBox in the main nib
    [box setContentView:v];
}

}

도움이 되었습니까?

해결책 2

후에 너무 많은 시간을 보내고 가려고 서 펜의 배열 컨트롤러의 동기에,나는 그에 접근 방식이다.는 유일한 것은 나를 위해 일하는 프로그래밍 방식으로 제어하는 GUI 에 표시되는 요소의 기본 펜촉과 그들의 수 있습니다.이것을 제거하는 것을 의미한 다른 빻.이것은 정말 지속가능한 솔루션을 작업하는 경우보다 더 많은 단지 몇 가지의 텍스트 필드,하지만 그것이 나를 위해 지금이다.

나는 여전히 따라 여호수아의의 조언을 해제하는 전환하기 전에 보기,하지만 지금은 나만 바인딩은 텍스트 필드를 arrayController.선택합니다.whateverKey

다른 팁

문제가 당신을 떠나 빻'배열 컨트롤러밖에 없는 문서의 선택입니다 그 원인을 시도하는 경우(선택이 변경)을 대표하는 선택 항목입니다.

이것을 보십시오:

  1. 을 제거하는 바인딩에서 촉.
  2. 를 추가하기 전에 새로운 보고,연결하고 그 바인딩에서 코드입니다.
  3. 를 제거하기 전에 오래된 보고,연결이 끊기 바에서 코드입니다.

이를 유지해야 모든 것이 행복합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top