0

我正在尝试使用以下访问器方法拦截 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];
}
4

1 回答 1

1

道歉。我做了一个改变,它现在可以工作了。我以为我过去曾尝试过,但它没有奏效......

我添加了

@property (readwrite, copy) NSMutableArray *things;

到 MyDocument.h

@synthesize things;

到 MyDocument.m。

似乎正在工作。

问候。

于 2010-06-25T20:48:54.847 回答