我并不为此感到自豪,但这是我们计划的当前设计。
我有一个看起来非常像这样的过滤器对象:
#import "Filter.h"
@implementation Filter
@synthesize DataSet = _dataSet;
@synthesize FilterList = _filterList;
@synthesize TypeOfFilter = _typeOfFilter;
@synthesize isFilterOn;
- (id)initWithDataSet:(NSArray *)array {
self = [super init];
if (self) {
if ([array count] > 0) {
self.DataSet = array;
[self CreateFilterList];
}
}
return self;
}
- (void)CreateFilterList {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:[_dataSet count]];
for (NSString *str in _dataSet) {
if (![str isEqualToString:@"NULL"]) {
[dict setObject:[NSNumber numberWithBool:NO] forKey:str];
}
}
self.FilterList = dict;
[dict release];
}
- (BOOL)isFilterOn {
NSArray *filters = [_filterList allKeysForObject:[NSNumber numberWithBool:YES]];
if ([filters count] > 0) {
return YES;
}
else {
return NO;
}
}
- (NSArray *)GetCurrentFilters {
return [_filterList allKeysForObject:[NSNumber numberWithBool:YES]];
}
- (void)ResetFilter {
for (NSString *key in [_filterList allKeys]) {
[_filterList setObject:[NSNumber numberWithBool:NO] forKey:key];
}
}
@end
因此在我们的模型中,我们基本上为我们想要过滤的东西创建一个TypeOfFilter。例如,我们可以创建一个@“Name”过滤器来过滤我们数据库中的Name。所有Filter对象都是我们的模型类的成员。我当时并不知道另一种方法,我正在研究如何重构未来。基本上我的过滤器只是一个字典,对于我们想要过滤的项目,其值为YES。
在我们的MainViewController中,我们向用户提供了一个选项,可以在弹出窗口中过滤名称等不同的内容。进行选择后,Filter对象将按以下方式更新:
[((Filter *)[modelClass.FilterDictionary objectForKey:@"NameFilter"]).FilterList setObject:[NSNumber numberWithBool:YES] forKey:key];
在我们的modelClass中,有一个Filter对象的Dictionary。因此,根据用户的选择,我们通过名称获取相应的Filter对象,并根据其选择设置YES或NO。
此外,当在弹出框中进行选择以向用户提供要过滤的选项时,会对DoFilter方法执行操作,该方法基本上使用适当的项重新绘制MainViewController的内容。
我个人讨厌这个设计,并想知道我可以改进的不同方法。谢谢。