2011-03-16 2 views
0

코어 데이터 기반 NSArrayController에 바인딩 된 NSTableView가있는 간단한 앱이 있습니다.NSArrayController에서 filterPredicate가 적용된 특정 레코드의 행 수를 계산합니다.

응용 프로그램은 핵심 데이터 저장소의 모든 레코드를 테이블보기로 표시합니다.

NSArrayController에 필터 조건자를 설정하는 몇 가지 사용자 설정 가능 필터가 정의되어 있습니다. 이러한 플래그는

을 설정 한 필터 OUT 기록과 같은 일을 할

내가 예를 들어, 핵심 데이터 저장소의 레코드에 대한 메타 데이터를 나열 대시 보드를 가지고 싶다 : 기록의

총 수 기록 여기서 = Y 활성 필드
레코드 수 여기서 필드 활성 = N
필드 갱신 레코드 =의 번호 Y

I 가게의 NSTableView는 아닌 표시되는 콘텐츠의 내용에 대한 사용량 정보를하고자 .

내가 가진 문제는 NSArrayController의 arrangedObjects 값이 필터 적용에 영향을 받기 때문에 필터를 켤 때 총 레코드 수와 같은 항목이 변경된다는 것입니다.

Google 검색을 많이하고 다양한 코딩 책을 살펴 보았지만 이러한 값을 IB의 NSTextField 값에 바인딩 할 수있는 방법으로 이러한 값을 계산하는 방법을 찾지 못했습니다.

어떤 도움이나 제안이라도 대단히 감사하겠습니다.

감사합니다.

대런.

답변

0

답장을 보내 주셔서 감사합니다.

이 결국 I는이 간단한 해결책 것으로 밝혀 (각 텍스트 필드에 대해 하나) 내가 IB에 추가 NSArrayControllers 생성

, 메인 MOC에 각각의 managedObjectContext 바인딩.

AC를 엔티티 모드로 설정 한 다음 각 조건의 FetchPredicate를 관련 조건으로 설정합니다.

내 UI에서 나는 다음 관련 새로운 AC의 arrangedObjects의 @count에 각각의 텍스트 필드를 바인딩.

감사합니다.

대런.

0

핵심 데이터 스택에서 직접이 값을 계산하고 KVO 규격에 따라 노출하는 다른 컨트롤러 개체를 만들어 보지 않겠습니까?

0

먼저 컨트롤러를 서브 클래 싱합니다 (이 경우 NSArrayController). 둘째, 원하는 값을 나타내는 컨트롤러의 속성을 만듭니다. 예 :

@property (비소 성, 유지) NSNumber * fieldActiveYes; @property (비고 체, 보유) NSNumber * fieldActiveNo; @property (nonAtomic, retain) NSNumber * fieldChanged;

다음으로, 각 속성에 대한 사용자 지정 게터를 만듭니다

-(NSNumber *) fieldActiveYes{ 
    // ... perform a fetch by value on the field you wish 
    //... set the fetch to return dictionaries only 
    // ... use @sum collection operator to sum the fields 
    return sum; 
} 

바인드 UI 필드의 값을 컨트롤러에 fieldActiveYes 키를 누릅니다. managedObjectContext가 변경되면 다시 계산해야합니다. 그렇지 않다면 관찰을 추가해야 할 수도 있습니다.

관련 문제