Какао: Может ли NSArrayController быть разделен на подклассы для предоставления пользовательских «ключей контроллера»? - PullRequest
0 голосов
/ 03 апреля 2012

А если так, как?

Это кажется очень полезной вещью, которую можно сделать, но я не могу на всю жизнь понять это или найти какую-либо информациюв сети!

Конкретная ситуация, которую я имею в виду, это то, что у меня есть две смежные таблицы, в левой сначала содержится список имен, затем я хочу «переместить влево» и кнопку «переместить вправо», чтобы переместить именас одного стола на другой.

Я подумал, что элегантным решением этой проблемы было бы использование одного контроллера массива с двумя ключами контроллера "layoutLeftObjects" и builtRightObjects "

Я схожу с ума здесь! Может кто-то, пожалуйста, пролить светЯ опубликую пример кода по запросу.

Большое спасибо

EDIT: начальные попытки

Подкласс NSArrayController реализован (пока) таким образом:

@interface LeftRightArrayController : NSArrayController {
    NSArray * leftObjects;
}

-(NSArray *)leftObjects;
-(void)setLeftObjects:(NSArray *)newLeftObjects;
@end


@implementation LeftRightArrayController

-(NSArray *)leftObjects {
    return leftObjects;
}

-(void)setLeftObjects:(NSArray *)newLeftObjects {
    leftObjects = newLeftObjects;
}


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    [self setLeftObjects:[NSArray arrayWithArray:[self arrangedObjects]]];  
    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}

@end

И данные, предоставляемые контроллеру:

[myArrayController addObserver:myArrayController forKeyPath:@"arrangedObjects" options:0 context:NULL];

NSString *myKey = [NSString stringWithString:@"name"];
NSDictionary *myNewDictionary1 = [NSDictionary dictionaryWithObject:@"date1" forKey:myKey];

NSArray *myArray = [NSArray arrayWithObjects:myNewDictionary1, nil];

[myArrayController setContent:myArray];

Этот код работает, когда я только привязываюсь к «Left Right Array Controller.arrangedObjects.name», но обрывается, как толькоЯ пытаюсь привязаться к «Left Right Array Controller.leftObjects.name»

1 Ответ

0 голосов
/ 03 апреля 2012

Ты не хочешь этого делать.Вы всегда должны использовать один NSArrayController на просмотр таблицы.В вашем случае у вас должно быть два вспомогательных массива, один для левых объектов и один для правых объектов.

Затем следует связать каждое представление таблицы с соответствующим массивом через собственный контроллер массива.

Затем вы должны внедрить отдельный контроллер для управления передачей данных между массивами, либо манипулируя массивами напрямую, используя KVO-совместимые средства доступа, либо используя различные методы вставки / удаления NSArrayController.

...