2012-02-20 14 views
6

Я создаю UITableView с некоторыми агрегированными данными. По пути заголовки разделов должны использоваться для сортировки и группировки ячеек таблицы.Основные данные - использование свойств переходных процессов в группе

Проблема заключается в том, что я хотел бы использовать свойство Transient в NSFetchRequest для генерации заголовков разделов. & результаты сортируются. Проблема в том, что при настройке NSFetchRequest я получаю «NSInvalidArgumentException», причина: «Недопустимое ключевое слово player.fullName передано в setPropertiesToFetch».

Основной объект NSFetchRequest - это объект Player со свойствами: firstName & lastName. Для сортировки и группировки данных было введено свойство passient «fullName». Это простая конкатенация свойств lastName и firstName.

Вещи пытался до сих пор являются:

а) Определение - (NSString *) FULLNAME метод

б) Определение @property (неатомической, только для чтения) NSString * FULLNAME

с) Добавление a @dynamic fullName

d) Добавление атрибута fullName к объекту Player &, что делает его временным.

Есть ли какие-либо идеи или есть сейчас, чтобы выбрать переходные свойства в NSFetchRequest, который включает предложение group by.

Любая помощь приветствуется.

ответ

2

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

Попробуйте отсортировать запрос на выборку по имени lastName и firstName (два отдельных дескриптора сортировки в массиве), а затем используйте player.fullName в качестве пути ключа имени раздела при создании выбранного вами контроллера результатов (только a и b из списка выше).

+0

Отличное предложение. Пробовал и так близко. Все еще получаю исключение KVO для fullName, но я считаю, что это связано с тем, что я использовал NSDictionaryResultType не стандартный результат. Но, конечно, мне дали новый путь. – user1220717

3

Ну, в конце концов, похоже, что переходное свойство в группе NSFetchResults с группой By невозможно.

Отличное предложение от jrturton было близко. В конце концов, свойство passient fullName было достаточно простым для генерации при обновлении для объекта и обновлялось очень редко, поэтому решение заключалось в том, чтобы прекратить использование свойства переходного процесса и сделать полноценный атрибут. Подумайте об этом как о крайней денормализации.

решение было установить следующее

-(void)setLastName:(NSString*)aName 
{ 
    [self willChangeValueForKey: @"lastName" ]; 
    [self setPrimitiveValue: aName forKey: @"lastName" ]; 
    [self updateFullName]; 
    [self didChangeValueForKey: @"lastName" ]; 
} 

-(void)setFirstName:(NSString*)aName 
{ 
    [self willChangeValueForKey: @"firstName" ]; 
    [self setPrimitiveValue: aName forKey: @"firstName"];  
    [self updateFullName]; 
    [self didChangeValueForKey: @"firstName" ]; 
} 

Это обновляет FULLNAME как свойство субъекта игрока и удалить мои вопросы. Надеюсь, поможет.

+0

Вы не правильно записываете свой доступ к управляемым объектам - см. Https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html - вы должны публиковать уведомления KVO. – jrturton

+0

Вы правы. Я обновил их выше. Я думаю, что я был слишком рад, когда работал над своей проблемой. – user1220717

Смежные вопросы