作者tentenlee (天天)
看板MacDev
标题[问题] https NSURLConnection 的问题
时间Thu Jul 12 15:46:02 2012
因为现在连线方式要改成用https的方式去连
所以我APP要改写一下
然後用到NSURLConnection这东西
但是他不会等到我连线完成回应的资料也下载完成後才继续程式
我送出去他就直接跑下一行程式 造成没资料回来
http://pastebin.com/eAHAHn66
然後我google到两个方式
一个是用
NSURLConnection *theConnection = [[NSURLConnection alloc]
initWithRequest:theRequest delegate:self startImmediately:NO];
[theConnection scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSRunLoopCommonModes];
[theConnection start];
但是无效 他还是不会等资料回来就继续走了
另外一个是用无线回圈去等资料完成
while(!finish) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate distantFuture]];
}
这种方式是可以等到资料回来才继续下去
但是要用到无限回圈 好像有点不好...
想搞定看看第一个方法是怎麽做的 还是我少做甚麽...
有人可以给我解答麻...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.84.63.193
1F:→ ybite:为什麽不改成非同步的写法呢? 07/12 15:54
2F:→ ybite:(也就是送出 Request 之後用 Delegate 去接结果) 07/12 15:55
3F:推 kiii210:你一次只送出一个请求吗?还是有用回圈跑? 07/12 16:18
4F:→ tentenlee:目前只有一个 之後会有多个 07/12 16:45
5F:→ tentenlee:请位非同步的写法是甚麽意思? 目前适用delegate去接结果 07/12 16:46
6F:→ tentenlee:但是还没接完 他就跳走了 07/12 16:46
7F:→ kiii210:我自己遇到是跑回圈跑太快,一次送出太多request来不急接收 07/12 16:51
8F:→ tentenlee:现在只有一个呀~ 一个都搞不定 还没想到多个.. 07/12 16:51
9F:→ kiii210:所以第一个request还没跑完,就已经送出第二个第三个reques 07/12 16:52
10F:→ kiii210:後来有解决,不过看来情况好像不一样,不知道"跳走"是甚 07/12 16:52
11F:→ kiii210:麽意思 07/12 16:52
我是建立一个.h .m要来做call api这件事情
然後送出需求给server之後 他会直接跑到下一行
不会等资料回传完整之後再回传资料给我
然後程式就跑到後面我需要有接回资料的地方的程式
现在用一个无限回圈把他停在送出资料的那行的话
就可以正常 会等到资料回传之後再继续下去
但是也有google到第一个做法 所以想知道第一个做法的方式是如何
是不是我有甚麽地方没注意到的 所以她不会等到资料接收结束才继续下一行
※ 编辑: tentenlee 来自: 219.84.63.193 (07/12 16:58)
12F:推 Blueshiva:你处理data的code要放在delegate里面 07/12 17:09
但是 如果没有用回圈去跑让她停留在那边的话
他根本不会跑delegate 就直接下一行了
他只会送出去
※ 编辑: tentenlee 来自: 219.84.63.193 (07/12 17:13)
13F:→ kiii210:弱弱一问 有用到UIWebview吗@@? 07/12 17:17
没有 只是 http post 需要送资料过去 等他回给我资料
那些资料我在来使用
※ 编辑: tentenlee 来自: 219.84.63.193 (07/12 17:21)
14F:→ kiii210:你是要回传的html原码吗? 07/12 17:23
回传的资料是JSON格式
15F:→ tentenlee:有那边可以让我放code会让大家比较好读的吗? 07/12 17:24
※ 编辑: tentenlee 来自: 219.84.63.193 (07/12 17:25)
17F:→ kiii210:JSON没用过...QQ看要不要用UIWebView试试看 07/12 17:28
18F:→ kiii210:然後在webViewDidFinishLoad处理你要的资料 07/12 17:28
http://pastebin.com/eAHAHn66
json就只是一串文字而已 用webview去做反而没意义
※ 编辑: tentenlee 来自: 219.84.63.193 (07/12 17:32)
19F:→ kiii210:一样可以在後端执行阿~我也是post出去之後,在DidFinishLoa 07/12 17:38
20F:→ kiii210:d处理网页原码0.0 速度一样很快..以上..新手弱弱建议-.- 07/12 17:38
21F:→ kiii210:json就真的不懂了~~>"< 07/12 17:39
现在重点真的不是在json 现在是还没接收到资料 他就跑下去了
我根本还没看到他回来是甚麽东西
※ 编辑: tentenlee 来自: 219.84.63.193 (07/12 17:42)
22F:推 popcorny:怎麽不用[NSData dataWithContentsOfURL:url]? 07/12 19:06
23F:推 Blueshiva:那会block UI,最好避免 07/12 19:19
24F:推 popcorny:对啊.. 会block ui..不过原po不是就要这样吗? 07/12 23:07
25F:→ tentenlee:这个函数 只是下载吧?这是GET资料 但是我要POST後再GET 07/13 10:48
26F:推 popcorny:那我会建议直接用现有的library去包装你的NSURLConnectio 07/13 12:00
27F:→ popcorny:ASIHttpRequest, AFNetworking, MKNetworkKit.... 07/13 12:02
28F:→ popcorny:比你自己去组NSData.. 自己去处理delegate容易许多 07/13 12:02
29F:→ tentenlee:我知道~ 但是我还是想要知道为什麽.. 如果这礼拜搞不定 07/13 13:52
30F:→ tentenlee:我下礼拜就会用上述的那些东西来用了 07/13 13:52
31F:→ nobody1:ASIHttpRequest 虽然没在维护了 不过也很够用了 07/14 00:01