我有一个应用程序,目前从Web服务获取NSURLConnection及其委托方法的JSON数组。这将返回一个用户数组。但现在我必须获取用户的观点。我是否需要创建一个新的NSURLConnection来进行第二个调用(但是,我将如何处理来自两个不同调用的委托方法的数据?)还是有办法创建多个操作?我可以使用NSURLRequest处理多个操作吗?
回答
对于每个请求,您需要一个新的NSURLConnection
。
有关问题的最好的办法是有
“模范”代表你的用户。例如。字典的
NSArray
,其中一个字典表示一个用户。一个获取用户数组的专用类。它使用异步模式,类似于
,其获取用户的“点”NSOperation
,可能它成为NSOperation
的子类。基本上,它有一个start
方法和一个完成块。这个类将一个NSURLConnection
封装为伊娃,响应数据以及可能的几个状态信息,如NSURLResponse
对象和可能是NSError
对象。让这个类有一个完成块,其参数返回预期结果或NSError
。完成块可能有这样的签名:typedef void (^completion_block_t)(id result);
另外一个专用类。基本上,和上面一样。
甲异步包装方法具有下列签名:
typedef void (^completion_block_t)(id result); -(void) fetchUsersAndPoints:(completion_block_t)completionHandler;
其中第一获取用户阵列。然后,成功完成后,为每个用户提取用户的“点”。当所有异步请求完成或发生错误时,它会调用完成处理程序。
第一个提示:您需要使用“连续”来“链接”两个或更多异步函数。基本原理:
asyncA(^(id resultA) {
asyncB(^id(id resultB){
...
asyncC(^id(id result){
NSLog(@"result: %@", result);
});
}
});
这将读取:执行asyncA。如果完成执行asyncB。如果完成执行asyncC。
第二提示:您可以同时调用“点要求”。
第三提示:当“点请求”的完成处理程序被调用了N次时,你知道什么时候所有“点请求”都完成了,其中N是用户数。
第一次警告:
您可能需要将接入模式阵列同步,并且也完成块中的访问计数器N。
第二个注意事项:
当你有太多的“点请求,”你可能需要利用一个队列(NSOperationQueue
为例),你限制由NSURLConnection
情况下进行的并发请求的最大数量。
最简洁的方法是为每个连接设置一个属性/ ivar,然后将委托方法的参数与它们进行比较。您也可以获得连接请求并获取它的URL,但由于硬编码数据,这似乎是一个不好的方法。
你的意思是我应该将它们命名为connection1和connection2,然后在委托方法 - (void)connectionDidFinishLoading:(NSURLConnection *)连接我应该检查连接参数?确切地说,是 – marciokoko
。但使用更多的解释性名称:) –
我到底该如何检查connectionDidFinishLoading方法中的连接名称? – marciokoko
- 1. 8086处理器标签可以包含多个操作吗?
- 2. 我可以使用操作助手吗?
- 3. 我可以处理这个流吗?
- 4. 我可以使用多处理进行并行化吗?
- 5. 我可以使用C#处理程序处理HTML5事件吗?
- 6. 我可以为多个操作配置一个MvcSiteMapProvider节点吗?
- 7. Valgrind可以使用多个处理器吗?
- 8. 我可以用Python处理视频吗?
- 9. 忘记密码操作,我可以使用相同的操作名称处理帖子吗?
- 10. 我可以使用array.prototype.reduce()一次处理两个数组吗?
- 11. 我可以使用多个foreach吗?
- 12. 我可以使用多个“with”吗?
- 13. 我可以不使用多个NavDropdown吗?
- 14. 我可以为ApiController提供多个POST操作吗?
- 15. 我可以在通知操作中捆绑多个PendingIntents吗?
- 16. ASP.NET工作线程可以同时处理多个请求吗?
- 17. 我可以在Haskell中同时处理多个文件吗?
- 18. 可可:操作处理
- 19. 我可以重复使用zlib的z_stream进行多个操作吗?
- 20. 我可以在Rails视图上使用多个预处理器吗?
- 21. Rails控制器操作可以处理html和javascript请求吗?
- 22. 我可以使用Twitter API执行以下操作吗?
- 23. 我可以使用JIRA管理多个客户项目吗
- 24. 我可以在多处理器机器中禁用一个或多个处理器吗?
- 25. 可以处理多点触控吗?
- 26. 我可以使用处理器选择我的程序吗?
- 27. 使用委托时超时处理NSURLRequest
- 28. 使用一个事件处理程序进行多个操作
- 29. 我可以在Spring上处理POJO吗?
- 30. 在oncomplete上处理多个操作
好,现在我在我的viewDidLoad中创建NSURLRequest&NSURLConnection,然后在connectionDidFinishLoading中接收数据并填充我的usersArray。我刚创建了一个HelperClass来处理URL抓取。所以我可以在vc类中创建NSOperation并调用helper类,或者其他选项是使用NSURLConnection委托回调。但是我在哪里可以将这些回调方法放在助手类中呢? – marciokoko
重要的是,我已经把封装了NSURLConnection的*非常有限的*类的样本,响应数据和其他状态信息。这应该给你一个开始:[SimpleGetHTTPRequest](https://gist.github.com/couchdeveloper/5764723) – CouchDeveloper
Thx,我看到了类,我现在明白SimpleGetHTTPRequest类可以多次调用,每次调用一次取。最后一件事,结果对象如何返回到viewcontroller以及performSelectorOnMainThread:(start)?我对这是如何工作有不同的想法(显然是错误的:)) – marciokoko