2010-06-25 84 views
0

我想拦截一个NSArrayController(thingsController)addObject方法与以下访问器方法。为什么NSArrayController不通过绑定调用访问器方法?

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

我有两个类:Thing和MyDocument。事物有一个属性:名称。 MyDocument有一个名为things的NSMutableArray和一个名为thingsController的NSArrayController。在NIB中,文件的所有者被设置为MyDocument,并且我将NSArrayController的内容数组绑定到文件所有者,并将模型路径设置为事物。 NSArrayController也有模式设置为类,类名设置为Thing,它有一个名为name的键。在MyDocument中,我有一个名为createThing的方法,它首先发送thingsController newObject,然后发送addObject。如果我在Thing的init方法中设置断点,则在thingsController发送newObject时会调用它。但是,当thingsController发送addObject时,我的访问器方法insertObject:(Thing *)在ThingsAtIndex:(NSUInteger)索引中没有调用。

我已阅读苹果公司关于键值编码访问器方法的文档,我认为我很合规,但是我必须缺少一些东西。

任何帮助将不胜感激。下面

代码...

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

道歉。我做了一个改变,现在它工作。我想我已经在过去尝试这样做,它没有工作......

我加

@property (readwrite, copy) NSMutableArray *things; 

到MyDocument.h

@synthesize things; 

到MyDocument.m 。

似乎工作。

问候。

相关问题