2010-06-25 2 views
0

다음 접근 자 메서드를 사용하여 NSArrayController (thingsController) addObject 메서드를 가로 채려고합니다.NSArrayController가 바인딩을 통해 접근 자 메서드를 호출하지 않는 이유는 무엇입니까?

- (void)insertObject:(Thing *)thing 
inThingsAtIndex:(NSUInteger)index; 

나는 두 가지 클래스 Thing과 MyDocument가 있습니다. 것은 하나의 속성을 가지고 있습니다 : 이름. MyDocument에는 things라는 NSMutableArray와 thingsController라는 NSArrayController가 있습니다. NIB에서 File 's Owner는 MyDocument로 설정되고 NSArrayController의 내용 배열은 File 's Owner에 바인딩되고 모델 경로는 사물에 설정됩니다. NSArrayController는 Class로 설정된 모드, Class Name이 Thing으로 설정되어 있으며 name이라는 키가 하나 있습니다. MyDocument에는 createThing이라는 메서드가 있는데, 먼저 thingsController newObject를 보낸 다음 addObject를 보냅니다. Thing의 init 메소드에 중단 점을 설정하면 thingsController가 newObject로 전송 될 때 호출됩니다. 그러나, thingsController가 addObject로 보내지는 경우, 내 접근 자 메소드 insertObject : (Thing *) inThingsAtIndex : (NSUInteger) 인덱스가 호출되지 않습니다.

키 - 값 코딩 액세서 방법에 대한 Apple의 설명서를 읽었으며 호환되는 것으로 생각되지만 뭔가를 놓친 것 같습니다.

도움을 주시면 감사하겠습니다. 아래

코드 ...

Thing.h

#import <Cocoa/Cocoa.h> 


@interface Thing : NSObject { 
NSString *name; 

} 
@property (readwrite, copy) NSString *name; 

@end 

Thing.m

#import "Thing.h" 


@implementation Thing 

@synthesize name; 

-(id) init 
{ 
[super init]; 

name = @"Default"; 

return self; 
} 

@end 

MyDocument.h

#import <Cocoa/Cocoa.h> 
@class Thing; 

@interface MyDocument : NSDocument 
{ 
NSMutableArray *things; 
IBOutlet NSArrayController *thingsController; 
IBOutlet NSTableView *tableView; 
} 


- (IBAction)createThing:(id)sender; 

- (void)insertObject:(Thing *)thing 
inThingsAtIndex:(NSUInteger)index; 

- (void)removeObjectFromThingsAtIndex:(NSUInteger)idx; 


@end 

MyDocument.m

- (IBAction)createThing:(id)sender 
{ 
//Create the object 
Thing *t = [thingsController newObject]; 

//Add it to the content array of 'thingsController' 
[thingsController addObject:t]; 

NSLog(@"The new content of array is%@",things); 

[t release]; 
} 

답변

1

사과. 나는 하나의 변화를 만들었고 지금은 효과가있다. 나는 MyDocument.m에

@synthesize things; 

을 MyDocument.h하는

@property (readwrite, copy) NSMutableArray *things; 

을 추가

... 내가 과거에 이것을 시도했고 그것이 작동하지 않았다 생각 .

작동하고있는 것으로 보입니다.

감사합니다.

관련 문제