作者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