为iPhone构建过滤器的正确方法?

时间:2012-02-09 23:53:02

标签: iphone

我并不为此感到自豪,但这是我们计划的当前设计。

我有一个看起来非常像这样的过滤器对象:

#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的内容。

我个人讨厌这个设计,并想知道我可以改进的不同方法。谢谢。

0 个答案:

没有答案