在做項目的時候用到了連接本地服務器以及JSON編碼。
首先是在本地電腦上搭建服務器,但是在MAC上,apache是自帶的,唯一需要安裝就是數據庫,apache的啓動很簡單,只要在terminal裏輸入:sudo apachectl -k start就可以,然後輸入密碼就OK了,同時開啓數據庫。
接下來就是php編寫了,我查了一些資料,主要連接方式有兩種,POST 和 GET,我選了POST,雖然用GET也沒關係,但是因爲GET會暴露參數,所以還是用了POST,在寫php時我查了一些關於JSON編碼的方式,網絡上有兩種方式,一種是直接進行編碼:
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
還有一種就是通過數組來編碼(也是我現在在用的方法):
while($row=mysql_fetch_object(($result)))//取出結果並顯示
{
$u = new User();
$u->user_id=$row->user_id;
$u->username=$row->username;
$u->pic_url = $row->pic_url;
$arr[] = $u;
}
echo json_encode($arr);
通過上面兩種方法,分別可以對數據進行JSON編碼,到時候在程序操作過程中會方便很多。
做完了JSON編碼,那麼php端的基本就完成了,接下來就是本地的連接到服務器上去了。
程序連接本地服務器步驟主要爲:
1.創建一個請求 :NSMutableURLRequest (需要提供URL)
2.創建需要的數據體(就是進行POST請求需要發送的參數)
3.建立異步連接
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 網絡請求結束之後執行!
}
在上面的代碼中需要創建一個進程,而這個進程不是主進程(mainQueue) 因爲如果是主進程的話,那麼用戶在聯網的時候是不能做其他事情的,這樣不合理。
而且代碼返回來的是data形式的數據,data形式可以轉換成string類型的,也可以轉換成字典類型,因爲要用到模型,所以我選擇轉換成字典類型的(也就是對JSON的解析):
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"RESPONSE DATA: %@", dic);
轉換成NSDictionary很簡單,因爲系統自帶的API裏的NSJSONSerialization速度相對於其他的JSON解析方式來說快很多,而且不必導入其他的第三方框架。這樣就完成了對JSON的解析。