2010-01-17 5 views
1

У меня есть fetchedResultsController, который вернул все записи для моей учетной записи «Учетная запись».Использование NSPredicate с основными данными NSFetchedResultsController

Я хотел бы быстро найти все записи учетных записей для атрибута «lastName» == значение и вернуть мне объект Account или, по крайней мере, indexPath объекта в fetchedResultsController. Возвращается только один объект.

Кроме того, что можно перебирать каждый объектAtIndexPath, есть ли лучший способ поиска fetchController с использованием NSPredicate?

ответ

8

mootymoots, просто фильтровать неправдоподобные объекты с другим предикатом ...

NSPredicate *lastNameMatch = ... 
NSArray *matchingFetchedObjects = [fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:lastNameMatch]; 

Это оставляет ваши fetchedResultsController результатов не-изменено, но дает вам массив спичкой для последнего имени предиката.

3
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
// set up fetch request 
... 
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(lastName like '%@')", self.lastName]]; 
[fetchRequest setPredicate:requestPredicate]; 
... 
// perform fetch 
NSError *error = nil; 
if (![self.fetchedResultsController performFetch:&error]) { 
    // handle error... 
} 

... 

Account *uniqueAccount = [[self.fetchedResultsController fetchedObjects] anyObject]; // assuming lastName attribute is unique 
+0

спасибо Alex - так вы говорите, что я должен игнорировать уже настроенный fetchedResultsController, который строит мой NSTableView и создает для этого дополнительный? Я предполагаю, что я говорю, я не могу выполнить NSPredicate на уже полученных объектах Account в fetchedResultsController? – mootymoots

+1

Да, вы можете применить предикат к существующему 'NSSet' или' NSArray'. Нет, вам не нужно создавать дополнительный FRC. См .: http://theocacao.com/document.page/346 –

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