2013-07-09 2 views
0

У меня есть опыт разработки Java и Android, и теперь я пытаюсь изучить Objective-C и разработку iPhone/iPad. Чтобы научить себя, я переписываю приложение, которое я сделал для Android, для iPhone.UISearchBar, NSPredicate, w/Array of Objects

Теперь я пытаюсь использовать UISearchBar в представлении таблицы, которое я заполнил именами из объектов-членов. Однако у меня возникает проблема с использованием NSPredicate для извлечения свойств имени из созданных мной объектов-членов, поскольку он сбой. Я смог создать обходной путь, создав совершенно отдельный массив, заполненный только именами, и использую его с NSPredicate, но это далеко не идеально и создает проблемы в будущем.

Итак, в основном, я смог определить проблему, как использовать NSPedicate, или, может быть, установить объекты-члены в предыдущем классе. Чтобы уточнить, мой объект правильно заполнен, когда я вхожу в метод, который использует NSPredicate, поэтому я знаю, что мои объекты не просто ноль.

Вот мой .h для моего класса участников.

@interface AKPsiMember : NSObject 

    #define CURRENT_STATUS @"Current" 
    #define ALUMNI_STATUS @"Alumni" 


    @property (nonatomic, strong) NSString *firstName; 
    @property (nonatomic, strong) NSString *lastName; 
    @property (nonatomic, strong) NSString *emailAddress; 
    @property (nonatomic, strong) NSString *pledgeClass; 
    @property (nonatomic, strong) NSString *major; 
    @property (nonatomic, strong) NSString *phoneNum; 

А также мой TableViewController .й, который содержит делегат метода UISearchBar

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    NSPredicate *resultPredicate = [NSPredicate 
            predicateWithFormat:@"SELF.firstName contains[c] %@", 
            searchText]; 


    self.searchedMemberNameResults = [self.listedMembers filteredArrayUsingPredicate:resultPredicate]; 

} 

и, наконец, ошибку с моей трассировки стека

'NSInvalidArgumentException', reason: '-[AKPsiMember isEqualToString:]: unrecognized selector sent to instance 0x716bbd0' 
+0

Вы пытались просто удалить SELF: '@" firstName содержит [c]% @ ", ...' –

+0

На самом деле, похоже, что теперь он работает правильно из-за движения кости на моей стороне. Я искал проблему не в том месте. Но последующий вопрос на ваш вопрос, что именно делает объявление САМО? – bmjohns

+0

Вы можете использовать SELF в предикатах примерно так: '[NSPredicate predicateWithFormat: @" SELF ==% @ ", AKPsiMemberObject];' –

ответ

0

Ну, я чувствую себя глупо. Моя проблема заключалась в установке my cell.textLabel.text = в объект-член вместо строки в объекте. Видимо, я сделал это изменение случайно, когда-то, когда впервые внедрял UISearchBar и просто не замечал.

В настоящее время мой предикат работает правильно! Спасибо всем, кто нашел время, чтобы помочь мне.