我试图使用以下访问器方法拦截NSArrayController(thingsController)addObject方法。
- (void)insertObject:(Thing *)thing
inThingsAtIndex:(NSUInteger)index;
我有两个类:Thing和MyDocument。东西有一个属性:名字。 MyDocument有一个名为things的NSMutableArray和一个名为thingsController的NSArrayController。在NIB中,File的Owner设置为MyDocument,我将NSArrayController的内容数组绑定到File的Owner并将模型路径设置为thing。 NSArrayController的模式设置为Class,Class Name设置为Thing,它有一个名为name的键。在MyDocument中,我有一个名为createThing的方法,它首先发送thingsController newObject,然后将其发送给addObject。如果我在Thing的init方法中设置断点,那么当thingController发送newObject时会调用它。但是,当thingController发送addObject时,我的访问器方法insertObject :( Thing *)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];
}
答案 0 :(得分:1)
道歉。我做了一个改变,它现在有效。我以为我过去曾经尝试过这种做法而且没有用过......
我添加了
@property (readwrite, copy) NSMutableArray *things;
到MyDocument.h
和
@synthesize things;
到MyDocument.m。
似乎正在发挥作用。
问候。