Wednesday, July 24, 2013

Block example

в классе

- (NSArray *)loadTitles
{
    NSMutableSet *set = [NSMutableSet set];
    
    NSArray *lists = [List findAll];
    for (List *list in lists) {
        NSSet *titles = [list.items select:^id(id element) {
            ListItem *item = element;
            return item.title;
        }];
        
        [set addObjectsFromArray:titles.allObjects];
    }
    
    return [set.allObjects sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
}

- (void)loadTitlesWithAction:(ArrayBlock)action
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSArray *titles = [self loadTitles];
        dispatch_async(dispatch_get_main_queue(), ^{
            if (action)
                action(titles);
        });
    });

}

вызов в другом классе
     // пример использования метода с блоком
    // вызываем метод и передаем блок, которые вызовется, когда метод закончится
    // в итоге получаем то же, что и с делегатом, но без мороки с делегатом
    self.allItemsInListForAutoComplete = [[AllItemsInList alloc] init];
    [self.allItemsInListForAutoComplete loadTitlesWithAction:^(NSArray *arr) {
        self.titleItemForAutoCompleteArray = arr.mutableCopy;
        [self.autocompleteTableView reloadData];
    }];


No comments:

Post a Comment