코어 데이터와 함께 NSARRAY 및 NSARRAYCONTROLLER를 어떻게 사용할 수 있습니까?
-
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 메소드를 만들 수 없습니까?
제휴하지 않습니다 StackOverflow