У меня есть собственный метод, который принимает блок в качестве аргумента.Я хочу отслеживать этот блок внутри 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];
}
РЕДАКТИРОВАТЬ:
Не берите в голову.Я не знаю, о чем я думал.3 балла:
- Блоки являются объектами objc
- Typo: setObject должно быть setValue
- 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);
});
}