我想拦截一个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];
}