ObjC / Core Data. Как я могу изменить значение ключа объекта от другого NSArrayController? - PullRequest
3 голосов
/ 11 февраля 2010

Я совершенно нуб в target-c и целый день пытаюсь найти решение этой проблемы:
У меня есть две сущности (хранение и расходы).
В хранилище у меня есть атрибут «номер».
В «Расходах» у меня есть атрибут «число», а другой - «стоимость».
Обе сущности связаны с таблицами через привязки какао.
Я создал подклассы для обоих NSArrayControllers, чтобы я мог создать следующее действие:
1. умножьте Expenses.selection.number на Storage.selection.cost
Я сделал это с этим кодом в ArrayController расходов:

- (IBAction)submit:(id)sender {
    NSNumber *price = [NSNumber numberWithFloat:[[self.selection valueForKey:@"storage.buy"] floatValue]];
    NSNumber *insert = [NSNumber numberWithInt:[[self.selection valueForKey:@"number"] intValue]];
    NSNumber *cost;
    cost = [NSNumber numberWithFloat:[insert intValue] * [price floatValue]];
    [self.selection setValue:cost forKey:@"cost"];


2. получить Storage.selection.number и добавить Expenses.selection.number
тут у меня проблема. В расходах ArrayController стараюсь:

NSNumber *stock = [NSNumber numberWithInt:[[self.selection valueForKey:@"storage.number"] intValue]];
sum = [NSNumber numberWithInt:[stock intValue] + [insert intValue]];
[self.selection setValue:sum forKey: @"storage.number"];


но я получаю: [<NSManagedObject 0x10013ad50> setValue:forUndefinedKey:]: the entity Expenses is not key value coding-compliant for the key "Storage.number".
Я также пытался создать метод в Storage ArrayController:

-(void)setNumber:(NSNumber*)number{
    [self.selection setValue:number forKey: @"number"];
}

но когда я называю это как: [Storage seNumber: sum];, возвращается:

+[Storage setNumber:]: unrecognized selector sent to class 0x100003430

Я также попробовал:

Storage *st = [[Storage alloc] init];
    [st setNumber: sum];
    [st release];


и хотя он не возвращает никакого сообщения об ошибке, он не работает.
есть идеи как решить эту проблему? Большое спасибо.

1 Ответ

2 голосов
/ 12 февраля 2010

Есть два способа сделать это:

Используйте -setValue: forKeyPath: вместо -setValue: forKey:; или

Возьмите второй объект из первого объекта следующим образом:

id selection = [self selection];
id storage = [selection valueForKey:@"storage"];
[storage setValue:sum forKey:@"number"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...