我正在尝试使用以下访问器方法拦截 NSArrayController (thingsController) addObject 方法。
- (void)insertObject:(Thing *)thing
inThingsAtIndex:(NSUInteger)index;
我有两个类:Thing 和 MyDocument。事物有一个属性:名称。MyDocument 有一个名为 things 的 NSMutableArray 和一个名为 thingsController 的 NSArrayController。在 NIB 中,文件的所有者设置为 MyDocument,我将 NSArrayController 的内容数组绑定到文件的所有者,并将模型路径设置为事物。NSArrayController 也将模式设置为 Class,Class Name 设置为 Thing,并且它有一个名为 name 的键。在 MyDocument 中,我有一个名为 createThing 的方法,它首先发送 thingsController newObject,然后发送 addObject。如果我在 Thing 的 init 方法中设置断点,它会在 thingsController 被发送 newObject 时被调用。但是,当 thingsController 被发送 addObject 时,我的访问器方法 insertObject:(Thing *)thing inThingsAtIndex:(NSUInteger)index 没有被调用。
我已经阅读了 Apple 关于 Key-Value Coding Accessor Methods 的文档,我认为我是合规的,但是,我一定遗漏了一些东西。
任何帮助将不胜感激。
下面的代码...
东西.h
#import <Cocoa/Cocoa.h>
@interface Thing : NSObject {
NSString *name;
}
@property (readwrite, copy) NSString *name;
@end
东西.m
#import "Thing.h"
@implementation Thing
@synthesize name;
-(id) init
{
[super init];
name = @"Default";
return self;
}
@end
我的文档.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
我的文档.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];
}