в классе
- (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];
}];