Как разделить это на метод - PullRequest
0 голосов
/ 04 ноября 2011

Я пытаюсь реорганизовать свой код так, чтобы он соответствовал хорошему шаблону OO, который является повторным использованием и меньшим повторением. У меня есть следующий код:

 PFQuery * query = [PFQuery queryWithClassName:@"Vote"];
    query.cachePolicy = kPFCachePolicyNetworkElseCache;
    [query whereKey:@"poll" equalTo:self.vote];
    [query whereKey:@"note" notEqualTo:nil];
    [query countObjectsInBackgroundWithBlock:^(int number, NSError * error) {
        note = number;
        [self.noteCount addSubview:self.generateCountLabel];

        if (note > 0){
            [self.note setUserInteractionEnabled:YES];
            [self.note setEnabled:YES];
        }
    }];

    PFQuery * query1 = [PFQuery queryWithClassName:@"Vote"];
    query1.cachePolicy = kPFCachePolicyNetworkElseCache;
    [query1 whereKey:@"poll" equalTo:self.vote];
    [query1 whereKey:@"image" notEqualTo:nil];
    [query countObjectsInBackgroundWithBlock:^(int number, NSError * error) {
        pic = number;    
        [self.picCount addSubview:self.generateCountLabel];

        if (pic > 0){
            [self.pic setUserInteractionEnabled:YES];
            [self.pic setEnabled:YES];
        }

    }];

Было действительно трудно разделить на один метод без большого количества операций if. Есть идеи?

1 Ответ

3 голосов
/ 04 ноября 2011

Вы можете использовать следующий метод ....

- (void)queryForKey:(NSString *)aKey view:(UIView *)aView countView:(UIView *)aCountView  {
    PFQuery * query = [PFQuery queryWithClassName:@"Vote"];        
    query.cachePolicy = kPFCachePolicyNetworkElseCache;
    [query whereKey:@"poll" equalTo:self.vote];
    [query whereKey:aKey notEqualTo:nil];
    [query countObjectsInBackgroundWithBlock:^(int number, NSError * error) {
        count = number;    
        [aCountView addSubview:self.generateCountLabel];

        if (count > 0){
            [aView setUserInteractionEnabled:YES];
            [aView setEnabled:YES];
        }
    }];
}

Тогда вы можете позвонить ...

[self queryForKey:@"note" view:self.note countView:self.noteCount];
[self queryForKey:@"image" view:self.pic countView:self.picCount];

Если вы уточните свое наименование, вы можете использовать динамические селекторы объектовт. е. для «примечания» у вас есть @ «note», self.note и self.noteCount, чтобы вы могли взять @ «note» и динамически выбирать представления «note» и «noteCount» (так как оба они начинаются с «note»)однако это не сработает для вашего изображения, поскольку у вас есть @ "image", но затем self.pic и self.picCount.

UPDATE

Переименуйте изображение вpic, а затем выставьте четыре представления (picCount, pic, note и noteCount) в качестве свойств.Тогда вы можете использовать что-то вроде этого ...

- (void)queryForKey:(NSString *)aKey  {
    PFQuery * query = [PFQuery queryWithClassName:@"Vote"];        
    query.cachePolicy = kPFCachePolicyNetworkElseCache;
    [query whereKey:@"poll" equalTo:self.vote];
    [query whereKey:aKey notEqualTo:nil];
    [query countObjectsInBackgroundWithBlock:^(int number, NSError * error, NSString *aKey) {
        [self setValue:number forKey:aKey];
        UIView *countView = [self objectForKey:[NSString stringWithFormat:@"%@Count", aKey]];
        [countView addSubview:self.generateCountLabel];

        if (number > 0){
            UIView *mainView = [self objectForKey:aKey];
            [mainView setUserInteractionEnabled:YES];
            [mainView setEnabled:YES];
        }
    }];
}

Вам придется поиграть с этим, так как у меня нет полного определения класса, чтобы получить его в точности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...