Хранить блоки внутри словаря

у меня есть собственный метод, который принимает блок в качестве аргумента. Я хочу отслеживать этот блок внутри NSDictionary. Как лучше всего добавить блок в словарь?

Я пробовал этот код, но после выполнения строки ниже (setObject ...) словарь все еще пуст. Я предполагаю, что это потому, что блок не относится к типу NSObject. Но как правильно это сделать?

- (void)startSomething:(NSURLRequest*)request block:(void (^)(NSURLResponse*, NSData*, NSError*))handler {

    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];

    [pendingRequests setObject:handler forKey:connection];
}

EDIT:

Неважно. Не знаю, о чем я думал. 3 балла:

  1. Блоки являются объектами objc
  2. Опечатка: setObject должен быть setValue
  3. forKey - это строка, поэтому она должна быть [описание соединения] или что-то в этом роде

В любом случае я исправил свою проблему вот так:

- (void)startSomething:(NSURLRequest*)request block:(void (^)(NSURLResponse*, NSData*, NSError*))handler {

    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
    [pendingRequests setValue:handler forKey:[connection description]];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {

        void (^handler)(NSURLResponse*, NSData*, NSError*);
        handler = [pendingRequests valueForKey:[connection description]];
        handler(nil, nil, nil);
    });
}
14
задан vgr 16 October 2011 в 02:49
поделиться