使用 Objective-C 中的 NSPredicate 过滤自定义数据数组 Class
Filter Array of Custom Data Class With NSPredicate in Objective-C
我有一个名为 DataClass
的自定义 class 数据,这里有详细信息。
@interface DataClass : NSObject
@property (assign,nonatomic)NSInteger invoiceID;
@property (assign,nonatomic)NSInteger anInvoiceID;
@property (strong,nonatomic)NSString *customerName;
@property (strong,nonatomic)NSString *departmentName;
@property (strong,nonatomic)NSString *typeNumberOfInvoice;
@property (strong,nonatomic)NSString *invoiceDate;
@property (strong,nonatomic)NSString *stockNumber;
@property (strong,nonatomic)NSString *vehicleDetail;
@property (strong,nonatomic)NSString *rONumber;
@property (assign,nonatomic)NSInteger amount;
@property (strong,nonatomic)NSString *color;
@property (strong,nonatomic)NSString *year;
@property (strong,nonatomic)NSString *location;
@property (strong,nonatomic)NSString *carVinNumber;
@property (strong,nonatomic)NSString *dealership;
@property (strong,nonatomic)NSString *technician;
@property (strong,nonatomic)NSData *imageData;
@property (strong, nonatomic)NSMutableArray *arrayOfLocations;
在我的 ViewController
class 中,我有一个文本字段,我在其中进行输入并根据文本进行显示。我有一个名为 arrayOfData 和 filteredDataArray 的 NSMutableArray
。 arrayOfData 包含上述 DataClass
的对象,但是当我尝试使用此代码执行此操作时,我得到错误
'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'
NSPredicate *aToZPredicate =
[NSPredicate predicateWithFormat:@"ANY invoiceID CONTAINS[cd] %@", searchText];
filteredDataArray = [arrayOfData filteredArrayUsingPredicate:aToZPredicate];
[_tableView reloadData];
试试这个
NSPredicate *aToZPredicate =
[NSPredicate predicateWithFormat:@"CAST(SELF.invoiceID, 'NSString') contains[cd] %@", searchText];
filteredDataArray = [arrayOfData filteredArrayUsingPredicate:aToZPredicate];
[_tableView reloadData];
如果要与整数进行比较,切勿使用包含。与等号比较
NSPredicate *aToZPredicate =
[NSPredicate predicateWithFormat:@"invoiceID == %d", [searchText intValue]];
filteredDataArray = [arrayOfData filteredArrayUsingPredicate:aToZPredicate];
[_tableView reloadData];
我有一个名为 DataClass
的自定义 class 数据,这里有详细信息。
@interface DataClass : NSObject
@property (assign,nonatomic)NSInteger invoiceID;
@property (assign,nonatomic)NSInteger anInvoiceID;
@property (strong,nonatomic)NSString *customerName;
@property (strong,nonatomic)NSString *departmentName;
@property (strong,nonatomic)NSString *typeNumberOfInvoice;
@property (strong,nonatomic)NSString *invoiceDate;
@property (strong,nonatomic)NSString *stockNumber;
@property (strong,nonatomic)NSString *vehicleDetail;
@property (strong,nonatomic)NSString *rONumber;
@property (assign,nonatomic)NSInteger amount;
@property (strong,nonatomic)NSString *color;
@property (strong,nonatomic)NSString *year;
@property (strong,nonatomic)NSString *location;
@property (strong,nonatomic)NSString *carVinNumber;
@property (strong,nonatomic)NSString *dealership;
@property (strong,nonatomic)NSString *technician;
@property (strong,nonatomic)NSData *imageData;
@property (strong, nonatomic)NSMutableArray *arrayOfLocations;
在我的 ViewController
class 中,我有一个文本字段,我在其中进行输入并根据文本进行显示。我有一个名为 arrayOfData 和 filteredDataArray 的 NSMutableArray
。 arrayOfData 包含上述 DataClass
的对象,但是当我尝试使用此代码执行此操作时,我得到错误
'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'
NSPredicate *aToZPredicate =
[NSPredicate predicateWithFormat:@"ANY invoiceID CONTAINS[cd] %@", searchText];
filteredDataArray = [arrayOfData filteredArrayUsingPredicate:aToZPredicate];
[_tableView reloadData];
试试这个
NSPredicate *aToZPredicate =
[NSPredicate predicateWithFormat:@"CAST(SELF.invoiceID, 'NSString') contains[cd] %@", searchText];
filteredDataArray = [arrayOfData filteredArrayUsingPredicate:aToZPredicate];
[_tableView reloadData];
如果要与整数进行比较,切勿使用包含。与等号比较
NSPredicate *aToZPredicate =
[NSPredicate predicateWithFormat:@"invoiceID == %d", [searchText intValue]];
filteredDataArray = [arrayOfData filteredArrayUsingPredicate:aToZPredicate];
[_tableView reloadData];