[英]How do I filter this object array using NSPredicate?
How do I filter this object array using NSPredicate filteredArrayUsingPredicate / predicateWithBlock?
類Person
是我的模態類,它具有多個屬性,如firstName
, lastName
等。此類的每個對象存儲在數組objPersonCell
。 從我的視圖控制器,我正在使用以下方法在UITableViewCell
上顯示字段:
// way similar to this
for(NSMutableArray *obj in self.objPersonCell){
lblFirstName.text = [(Person *)obj personType];
}
問題:對於搜索,我希望用戶使用NSPredicate
鍵入和過濾NSPredicate
並通過在UITableView上重新加載數據立即反映更改。 現在如何使用NSPredicate
。
我試過的是:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *searchTerm = [textField.text stringByReplacingCharactersInRange:range withString:string];
[self updateAsPerSearchTerm: searchTerm];
return YES;
}
-(void)updateAsPerSearchTerm:(NSString *)searchTerm
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains[cd] %@",searchTerm];
NSArray *sortedArray = [[(Person *)self.objPersonCell] filteredArrayUsingPredicate:predicate];
[self.objPersonCell removeAllObjects];
[self.objPersonCell addObjectsFromArray:sortedArray];
[self.tableView reloadData];
}
updateAsPerSearchTerm
內部的代碼對於傳遞objPersonCell是錯誤的。 我該如何設置。 如果可以的話, predicateWithBlock
如何更好地幫助我?
您似乎對轉換感到困惑。 這段代碼:
for(NSMutableArray *obj in self.objPersonCell){
lblFirstName.text = [(Person *)obj personType];
}
應該
for (Person *obj in self.objPersonCell){
lblFirstName.text = [obj personType];
}
因為objPersonCell
數組的內容是Person
對象。
類似的問題在這里:
NSArray *sortedArray = [[(Person *)self.objPersonCell] filteredArrayUsingPredicate:predicate];
你應該在哪里
NSArray *sortedArray = [self.objPersonCell filteredArrayUsingPredicate:predicate];
現在,關於過濾問題,您應該具有幾個屬性:
@property (strong, nonatomic) NSMutableArray *objPersonCell;
@property (strong, nonatomic) NSArray *tableDataSource;
默認:
self.tableDataSource = self.objPersonCell;
搜索時:
self.tableDataSource = sortedArray;
當您取消/完成搜索時:
self.tableDataSource = self.objPersonCell;
這樣,您就不會在搜索(和破壞其內容)時編輯objPersonCell
,並且表數據源方法保持簡單,因為您沒有嘗試在不同的源數組之間進行切換。 該表數據源的方法應該只使用tableDataSource
,不objPersonCell
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.