2014-09-21 63 views
0

我拥有一个NSString,UIImageBOOL属性的personObject。我想创建一个通过只是NSString通过数组中的某个对象进行过滤

personObject *person1 = [[personObject alloc]initWithName:@"John Smith" Photo:nil Invited:false]; 
personObject *person2 = [[personObject alloc]initWithName:@"Peter Smith" Photo:nil Invited:false]; 
personObject *person3 = [[personObject alloc]initWithName:@"Paul Smith" Photo:nil Invited:false]; 

[self.peopleArray addObject:person1]; 
[self.peopleArray addObject:person2]; 
[self.peopleArray addObject:person3]; 

- (void) filterContententForSearchText: (NSString *) searchText scope:(NSString *) scope{ 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", searchText]; 
self.searchArray = [self.peopleArray filteredArrayUsingPredicate:predicate]; 

}

人民数组包含personObjects过滤器谓词。

+0

'@“self.stringNameProperty startswith [c]%@”'? – Larme 2014-09-22 12:45:44

+0

nope没有工作 – Peter 2014-09-22 19:39:58

+0

任何错误信息? – Larme 2014-09-22 19:41:20

回答

0

您可以使用

+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block 
0

您应检查name财产,并使用contains如果你要搜索它作为一个子,看到这个例子:

类PersonObject:

@interface PersonObject : NSObject 
{ 
    NSString* name; 
    UIImage* img; 
    BOOL invited; 
} 
-(id)initWithName:(NSString*)name Photo:(UIImage*)img Invited:(BOOL)invited; 

@property (nonatomic, strong) NSString *name; 
@property (nonatomic, strong) UIImage *img; 
@property (nonatomic, assign, getter=isInvited) BOOL invited; 
@end 

执行:

#import "PersonObject.h" 

@implementation PersonObject 

-(id)initWithName:(NSString*)n Photo:(UIImage*)im Invited:(BOOL)i{ 
    if(self = [super init]){ 
     _name=n; 
     _img=im; 
     _invited=i; 
    } 
    return self; 
    } 

@end 

代码:

PersonObject *person1 = [[PersonObject alloc]initWithName:@"John Smith" Photo:nil Invited:false]; 
PersonObject *person2 = [[PersonObject alloc]initWithName:@"Peter Smith" Photo:nil Invited:false]; 
PersonObject *person3 = [[PersonObject alloc]initWithName:@"Paul Smith" Photo:nil Invited:false]; 

[self.peopleArray addObject:person1]; 
[self.peopleArray addObject:person2]; 
[self.peopleArray addObject:person3]; 


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@", @"Smith"]; 
self.searchArray = [self.peopleArray filteredArrayUsingPredicate:predicate]; 
NSLog(@"results: %@", self.searchArray); 

它输出:

2014-09-22 14:57:31.010 asf[27731:2455623] results: (
"<personObject: 0x7ffdbe301050>", 
"<personObject: 0x7ffdbe3010c0>", 
"<personObject: 0x7ffdbe3010f0>" 
) 

希望它能帮助!

+0

这是一个搜索栏,所以我需要使用从 – Peter 2014-09-22 19:39:40

+0

开始当然,这只是一个建议,当然你可以,无论如何,主要问题是你没有使用关键的“名称”过滤数组。 – suprandr 2014-09-23 07:38:07

+0

是啊,那不工作。属性名称是personName,我得到的错误信息是----原因:' - [personObject copyWithZone:]:无法识别的选择器发送到实例0x1095395e0' – Peter 2014-09-23 15:04:56

相关问题