У меня есть свой собственный метод, который принимает блок как аргумент. Я хочу отслеживать этот блок внутри 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 очка:
- Блоки являются объектами objc
- Typo: setObject должен быть установленValue
- 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);
});
}