HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 保持字典内的块大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有自己的方法,以块为参数.我想跟踪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分:

>块是对象
> Typo:setObject应该是SETVALue
> forKey是一个字符串,所以应该是[连接描述]或类似的东西

无论如何我现在解决了我的问题:

- (void)startSomething:(NSURLrequest*)request block:(void (^)(NSURLResponse*,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*,NSError*);
        handler = [pendingrequests valueForKey:[connection description]];
        handler(nil,nil,nil);
    });
}

解决方法

这还不行,或者说,最多只会巧合.

您需要复制处理程序,然后将其拖放到字典中.就像是:

void (^handlerCopy)(NSURLResponse*,NSError*) = Block_copy(handler);
[Dict setObject:handlerCopy forKey:@"foo"];
Block_release(handlerCopy); // Dict will -retain/-release,this balances the copy.

而且,是的,它应该是setObject:forKey:和objectForKey :.

大佬总结

以上是大佬教程为你收集整理的ios – 保持字典内的块全部内容,希望文章能够帮你解决ios – 保持字典内的块所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。