Почему NSArrayController не вызывает методы доступа через привязки? - PullRequest
0 голосов
/ 26 июня 2010

Я пытаюсь перехватить метод addObject NSArrayController (thingsController) с помощью следующего метода доступа.

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

У меня есть два класса: Thing и MyDocument.У вещи есть одно свойство: имя.MyDocument имеет NSMutableArray, называемый вещи, и NSArrayController, называемый thingsController.В NIB для владельца файла установлено значение MyDocument, а у меня массив содержимого NSArrayController привязан к владельцу файла, а путь модели - к вещам.NSArrayController также имеет режим, установленный на Class, Class Name установлен на Thing, и у него есть один ключ с именем name.В MyDocument у меня есть метод с именем createThing, который сначала отправляет thingsController newObject, а затем отправляет его addObject.Если я устанавливаю точку останова в методе init в Thing, он вызывается, когда thingsController отправляется newObject.Тем не менее, когда thingController отправляется addObject, мой метод доступа insertObject: (Thing *) thing inThingsAtIndex: (NSUInteger) index не вызывается.

Я прочитал документацию Apple по методам Access Keying Value Coding и я думаю,Я согласен, однако, я должен что-то упустить.

Любая помощь будет принята с благодарностью.

Код ниже ...

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];
}

1 Ответ

1 голос
/ 26 июня 2010

Извиняюсь.Я сделал одно изменение, и теперь оно работает.Я думал, что пробовал это в прошлом, и это не сработало ...

Я добавил

@property (readwrite, copy) NSMutableArray *things;

в MyDocument.h

и

@synthesize things;

до MyDocument.m.

Кажется, работает.

С уважением.

...