2013-04-10 4 views
3

환경 설정 패널에 데이터를 표시 할 테이블을 구축 중입니다. 모든 데이터는 NSUserDefaults에 있습니다. 목록에있는 장치의 데이터를 활성화/비활성화 할 수있는 확인란이 표에 있습니다. 확인란은 편집 가능한 유일한 셀입니다.공유 사용자 기본값에 체크 박스 바인딩하기

테이블에 공유 사용자 기본값의 데이터가 올바르게 표시됩니다. 따라서 올바른 공유 사용자 기본값 모델 키 경로에 올바르게 매핑 된 테이블 콘텐츠가 있다는 것을 알고 있습니다. 그러나 체크 박스를 토글하면 새 데이터가 기본값으로 전혀 쓰여지지 않습니다. 내가 프로그래밍의 기본을 설정할 수 있다는 생각은 NSButton (체크 박스)에 대한 선택 작업을 할당 시도

enter image description here

여기

는 ... 체크 박스 설정에서 엿볼 수있다. 이상하게도 행동은 결코 실행되지 않습니다. NSLog를 수행 한 간단한 작업을 설정했습니다. 체크 상자를 클릭하면 해고 된 적이 없습니다.

업데이트 : 내 기본 데이터 구조가 무엇인지 알 수 있도록 다음은 defaults 명령의 출력입니다. 이 테이블 뒤에는 코드가 없습니다.

{ 
    ClimateDeviceData =  (
       { 
      deviceName = Nest; 
      deviceSetting = "76"; 
      display = 1; 
      structure = Home; 
      uuid = d01AA02AB145204VR; 
     } 
    ); 
    ClimateLoginAtLaunch = 1; 
    ClimateMenuBarIconStyle = "Nest Temp Settings"; 
} 

업데이트 # 2 : 나는 단순히 확인란에서 선택기를 호출 할 수있는에 대한 해결책을 받아들이는이 시점에서.

+0

도움 만이 가능

희망은 다른 수준 높은해야합니까? ClimateDeviceData.display? –

+0

테이블 뷰가 공유 사용자 기본값 컨트롤러에 바인딩되고 모델 키 경로가 'ClimateDeviceData'로 설정되었습니다. –

답변

1

그림이 아닌 Shared User Defaults ControllerNSButton (체크 박스)을 바인드하지 않으려면 Table Cell View?

+0

나는 오랜 시간 동안 그 일을 시도해 보았고 데이터를 전혀 표시 할 수 없었습니다. 나는 사용자보기 디폴트 컨트롤러를 공유하기 위해 Table View를 묶는다. –

0

보기 기반 테이블보기의 경우에는 다릅니다. 뷰 기반 테이블 뷰에서 테이블 셀 뷰의 objectValue는 해당 행이 나타내는 개체입니다. 텍스트 필드, 체크 박스 등을 해당 objectValue의 keypath에 바인드합니다.

1

나는 앱에서 거의 같은 일을하고있다. 정확히는 아니지만 기본 원칙은 동일합니다. 바인딩이있는 테이블과 그 안에있는 버튼 (확인란이나 다른 버튼 일 수 있음)은 중요하지 않습니다.

버튼에 대한 조치를 시도했지만 작동하지 않았으므로 결국 KVC 개념을 사용했습니다.

  • 상태 속성 (부울)이있는 사용자 지정 개체의 여러 인스턴스를 저장하는 코드에서 변경할 수있는 배열을 참조하는 XIB에서 arrayController를 사용합니다.
  • 뷰 기반 tableview는 alignedObjects 컨트롤러 키를 사용하여 arrayController에 바인딩됩니다.
  • 버튼은 keyPath : objectValue.status를 사용하여 tableCellView (정렬 된 객체)에 바인딩됩니다 (해당 행에서 맞춤 개체의 status 속성을 효과적으로 가져 오는 것). 내가 그 개체의 '상태'키 패스에 관찰자를 추가

    smartApp *appFound = [[smartApp alloc] initWithApplicationIdentifier:key]; 
    
        if (appFound) 
        { 
         [appFound setStatus:[NSNumber numberWithBool:YES]]; 
    
         [appFound addObserver:self 
           forKeyPath:@"status" 
            options:(NSKeyValueObservingOptionNew | 
              NSKeyValueObservingOptionOld) 
            context:NULL]; 
    
         [_appsArray addObject:appFound]; 
        } 
    

    : 내 컨트롤러 코드에서

, 나는 사용자 정의 객체를 들고 가변 배열을 만들려면 다음 줄을 사용합니다.그리고 보류중인 코드를 추가하여 값 변경을 위해 객체를 관찰합니다.

- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)anObject 
        change:(NSDictionary *)change 
        context:(void *)context 
{ 
    if ([anObject isKindOfClass:[smartApp class]]) 
    { 
     if ([keyPath isEqual:@"status"]) 
     { 
      NSLog(@"Clicked on row: %lu", (unsigned long)[self.appsArray indexOfObject:anObject]); 
     } 
    } 
} 

일단 방법을 사용하면 원하는 것을 할 수 있습니다. 그것은 분명히 호출 될 것이고, 당신이 클릭 한 라인, 변경 사전, keypath와 일치하는 객체를 얻을 것입니다. 그것은 당신이 데이터에있는 tableview 세포 뷰를 결합 무슨 수준에서 명확하지