2014-09-21 62 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

相關問題