最近被安排了一項在 IOS 下 POS T資料的任務,在 Google 的幫助下總算是做出來了。網上的教程不全、亂、缺少一個全方位適合初級開發者的教程。
閱讀本教程你需要:
- 引用開源庫 ASIHTTPRequest(負責網路通訊)、JSONKit(負責封裝和解析JSON資料)
- 管理開源庫則需要工具 cocoapods(配置 ruby 和 gem),這是安裝教程
好的,現在假設裡上述工具都已經配置好了
- 新建一個工程,我以 Demo 為例 /Users/Demo
- 在命令終端中進入 Demo 目錄
-
用 vim 命令新建一個檔案 Podfile
輸入命令 vim Podfile
按下 i 鍵,進入輸入模式
內容為:platform :ios pod `ASIHTTPRequest`
按下 esc 進入命令模式,連按兩次大寫的 Z 儲存並退出 vim
-
輸入命令 pod install 等待 出現
[!] From now on use Demo.xcworkspace.
在 finder 中開啟 xcworkspace 來開啟工程(進行此操作最好先把 Xcode 關閉,不然會看到“xxx 已經在xcode中開啟的提示”)
-
把 github 上的 JSONKit 搞下來
git clone https://github.com/johnezang/JSONKit.git
-
匯入標頭檔案
#import “JSONKit.h”
#import <ASIHTTPRequest/ASIHTTPRequest.h>
在這裡需要處理兩個 bug
- JSONKit 不支援 arc 模式,所以在 Build Phases 中把 JSONKit.m Compiler Flags 填入“-fno-objc-arc”
-
不支援古老的 isa,所以你要這樣做
Include <objc/runtime.h>.
Replace everything like array->isa =_JKArrayClass; with object_setClass(array, _JKArrayClass)
And everything like class = array.isa with class = object_getClass(array)
好的,現在開始寫程式碼了
假設我們要上傳的 JSON 格式是這樣的:
{"email":"chenyu380@gmail.com","password":"FxxkYourAss"}
一個登入方法
-(NSDictionary*)Login:(NSString *)email password:(NSString *)password
{
NSMutableDictionary *resultsDictionary;// 返回的 JSON 資料
NSDictionary *userDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:password, @"password",email,@"email",nil];
if ([NSJSONSerialization isValidJSONObject:userDictionary])
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userDictionary options:NSJSONWritingPrettyPrinted error: &error];
NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
NSURL *url = [NSURL URLWithString:@"http://seanchense.com/login"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request addRequestHeader:@"Content-Type" value:@"application/json; charset=utf-8"];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request setRequestMethod:@"POST"];
[request setPostBody:tempJsonData];
[request startSynchronous];
NSError *error1 = [request error];
if (!error1)
{
NSString *response = [request responseString];
NSLog(@"Test:%@",response);
NSData* jsonData = [response dataUsingEncoding:NSUTF8StringEncoding];
}
}
return resultsDictionary;
}