2013-07-09 41 views
0

我有Java和Android开发经验,现在我正在尝试学习Objective-C和iPhone/iPad的开发。为了帮助自我教导,我正在将我为Android制作的应用程序重新写入iPhone。UISearchBar,NSPredicate,w /对象数组

我现在试图在我用“成员”对象填充名称的tableview中使用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; 

而且还包含从我的堆栈跟踪的UISearchBar方法委托

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


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

} 

最后的错误我TableViewController .M

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

您是否尝试删除SELF: '@“firstName包含[c]%@”,...' –

+0

实际上,由于我的骨头移动,它现在似乎正常工作。我在错误的地方寻找问题。但是对于你的问题的一个后续问题,说明SELF究竟做了什么? – bmjohns

+0

你可以在谓词中使用SELF,例如: '[NSPredicate predicateWithFormat:@“SELF ==%@”,AKPsiMemberObject];' –

回答

0

嗯,我觉得很傻。我的问题实际上是将我的cell.textLabel.text =设置为成员对象而不是对象中的字符串。很显然,前一段时间我第一次实现UISearchBar时偶然发生了这种变化,而且从未发现过。

我的谓词实际上现在工作正常!感谢每个花时间帮助我的人。