코어 데이터와 함께 NSARRAY 및 NSARRAYCONTROLLER를 어떻게 사용할 수 있습니까?

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

  •  06-07-2019
  •  | 
  •  

문제

작업하려면 NSARRAY에 액세스 해야하는 코드가 있습니다. 코어 데이터와 함께 사용하는 NSARRAY가 있고 데이터가 있지만 NSARRAYCONTROLLER에 NSARRAY에 액세스하는 방법은 확실하지 않습니다.

나는 단순히 헤더 파일에서 다음과 같이 선언 할 수 없습니다. NSArray *objectArray; 그것이 어떻게 또는 무엇을 알지 못하기 때문입니다 NSArray 액세스. 코어 데이터와 함께 사용중인 NSARRAY에 정확히 어떻게 액세스할까요?

내 헤더 파일 :

#import <Cocoa/Cocoa.h>


@interface MyOutlineView : NSOutlineView {
    NSArrayController* objectArray;
}

@end

내 구현 파일 :

#import "MyOutlineView.h"

@implementation MyOutlineView

- (void) outlineView: (NSOutlineView *) aView
     willDisplayCell: (id) aCell
      forTableColumn: (NSTableColumn *)aColumn
                item: (id) anItem
{
    id rootObj = anItem;
    unsigned row = [aView rowForItem:anItem];

    [aCell setDrawsBackground: YES];

    while ([aView levelForRow:row] != 0) {
        row --;
        rootObj = [aView itemAtRow:row];
    }

    // The colours here are foul and ugly.  Use something else, for
    // God's sake!
    if( [objectArray indexOfObject:rootObj] % 2 )
        [aCell setBackgroundColor: [NSColor yellowColor]];
    else
        [aCell setBackgroundColor: [NSColor blueColor]];
}

@end
도움이 되었습니까?

해결책

xib에서 nsarraycontroller에 연결된 iboutlet과 함께 테스트 앱을 만들었습니다. 이 테스트에서는 다음과 같습니다.

  • 핵심 데이터 애플리케이션 템플릿에서 시작;
  • 두 가지 속성 (String, int)을 갖춘 데이터 모델에서 생성 된 엔티티;

xib에서 :

  • Test_AppDelegate.ManagedObjectContext에 연결된 관리되는 객체 컨텍스트가있는 배열 컨트롤러;
  • 배열 컨트롤러의 첫 번째 및 두 번째 속성에 연결된 COL이있는 TableView;
  • 배열 컨트롤러의 추가에 연결된 버튼을 추가 및 제거합니다.
  • 버튼 "show count"및 레이블; -

코드에서 (test_appdelegate.*) :

  • iboutlet nsarraycontroller *ac; (test_appdelegate.ac에서 어레이 컨트롤러에서 xib에 연결);
  • Iboutlet nstextfield *nlabel; (xib로 연결);
  • (ibaction) shownum : (id) 발신자; ( "Show Count"버튼에서 연결);
  • Code in Action Shownum : [nlabel setIntValue : [[ac rateedObjects] count]];

나는 할 수있다 :

  • 테이블 뷰 및 제어 배열에 객체를 추가/제거합니다.
  • 코드에서 nsarraycontroller에 액세스하여 배열 배열을 얻습니다.

따라서 코드에서 XIB의 배열 컨트롤러로 iBoutlet을 바인딩하고 배열 ject에 액세스하는 것이 작동해야합니다.

다른 팁

나는 이것을 얻지 못할 수도있다 - 그러나 당신은 단지 initwitharray 메소드를 만들 수 없습니까?

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