0

次のアクセサー メソッドを使用して、NSArrayController (thingsController) の addObject メソッドをインターセプトしようとしています。

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

Thing と MyDocument の 2 つのクラスがあります。Thing には name という 1 つのプロパティがあります。MyDocument には、things という名前の NSMutableArray と、thingsController という名前の NSArrayController があります。NIB では、File's Owner が MyDocument に設定され、NSArrayController の content 配列が File's Owner にバインドされ、モデル パスが things に設定されています。NSArrayController には、モードが Class に設定され、Class Name が Thing に設定されており、name という 1 つのキーがあります。MyDocument には createThing というメソッドがあります。このメソッドは最初に thingsController newObject を送信し、次に addObject を送信します。Thing の init メソッドにブレークポイントを設定すると、thingsController が newObject に送信されたときに呼び出されます。ただし、thingsController が addObject に送信されると、アクセサー メソッドの insertObject:(Thing *)thing inThingsAtIndex:(NSUInteger)index は呼び出されません。

Key-Value Coding Accessor Methods に関する 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];
}
4

1 に答える 1

1

謝罪。私は1つの変更を加えましたが、現在は機能しています。私は過去にこれを試したことがあり、うまくいかなかったと思いました...

追加した

@property (readwrite, copy) NSMutableArray *things;

MyDocument.hへ

@synthesize things;

MyDocument.mに。

動作しているようです。

よろしく。

于 2010-06-25T20:48:54.847 に答える