Ошибка с NSComparator: инициализация несовместимых типов указателей блоков

Выполнение этого NSComparator:

NSComparator comparatore = ^NSComparisonResult(NSMutableDictionary *aDictionary, NSMutableDictionary *anotherDictionary) {
            return [[aDictionary objectForKey:@"Item"] localizedCaseInsensitiveCompare:[anotherDictionary objectForKey:@"Item"]];
    };
lista = [listaNonOrdinata sortedArrayUsingComparator:comparatore];

Я получаю эту ошибку: несовместимые типы указателей блоков инициализируют 'int (^) (struct NSMutableDictionary *, struct NSMutableDictionary *)', ожидается 'NSComparator'

Я читал об этой ошибке на этом сайте и в официальном руководстве, но не нашел решения.

Я все перепробовал, может быть, кто-то здесь мне поможет, а может, кто-то знает, как сделать то же самое по-другому. Спасибо!


person Shafa95    schedule 02.08.2013    source источник


Ответы (1)


NSComparator - это блок, ожидающий двух id. Вам нужно указать id в качестве типа аргумента и при необходимости выполнить приведение внутри вашего блока (в этом случае это не обязательно):

NSComparator comparatore = ^NSComparisonResult(id aDictionary, id anotherDictionary) {
    return [[aDictionary objectForKey:@"Item"] localizedCaseInsensitiveCompare:[anotherDictionary objectForKey:@"Item"]];
};
lista = [listaNonOrdinata sortedArrayUsingComparator:comparatore];
person Sergey Kalinichenko    schedule 02.08.2013