-->

2014年10月14日 星期二

使用php及mysql使app具備連線網路資料庫(web database)的能力 (四)-AFNetworking的更新

使用php及mysql使app具備連線網路資料庫(web database)的能力 (三) - 撰寫 app連線 php中,所使用的AFNetworking為1.x版本。而目前AFNetworking已更新到2.x版。筆者最近常收到許多朋友來信詢問相關的問題。因此,在此篇特別講述需要修改的部份。

首先,由於AFNetworking中的AFHTTPClient class已經被取消了。改由使用AFHTTPRequestOperationManager 這個class。作法一樣,請見下述程式碼。
- (IBAction)signUpBtn:(id)sender {
//將鍵盤縮回
[_userIDTF resignFirstResponder];
[_passwordTF resignFirstResponder];
//判斷基本的認證結果
if ([self validateAccount:_userIDTF.text] && [self validatePassword:_passwordTF.text]) {
//啟動一個hud
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
//設定hud的顯示文字
[hud setLabelText:@"connecting"];
//取得userID及password
NSString *userID = _userIDTF.text;
NSString *password = _passwordTF.text;
//設定伺服器的根目錄
NSURL *hostRootURL = [NSURL URLWithString:ServerApiURL];
//設定POST的內容
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:@"signUp", @"cmd", userID, @"userID", password, @"password", nil];
//產生控制request的物件
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]initWithBaseURL:hostRootURL];
//POST
[manager POST:@"api.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
//request成功之後要做的事情
//輸出response
NSLog(@"response:%@",responseObject);
NSDictionary *json = responseObject;
//取的api的key值,並輸出
NSDictionary *apiResponse = [json objectForKey:@"api"];
NSLog(@"apiResponse:%@",apiResponse);
//判斷signUp的key值是否等於success
NSString *result = [apiResponse objectForKey:@"signUp"];
NSLog(@"result:%@",result);
if ([result isEqualToString:@"success"]) {
//顯示註冊成功
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:5];
[imageView setImage:[UIImage imageNamed:@"success.png"]];
[_statusLB setText:@"Status:sign up successed"];
}else {
//顯示註冊失敗
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:5];
[imageView setImage:[UIImage imageNamed:@"signUpFail.png"]];
[_statusLB setText:@"Status:sign up fail"];
}
[MBProgressHUD hideHUDForView:self.view animated:YES];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//request失敗要做的事情
NSLog(@"request error:%@",error);
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:5];
[imageView setImage:[UIImage imageNamed:@"connectError.png"]];
[MBProgressHUD hideHUDForView:self.view animated:YES];
}];
}else {
//基本認證失敗
[_statusLB setText:@"validate fail"];
[MBProgressHUD hideHUDForView:self.view animated:YES];
}
}
view raw gistfile1.m hosted with ❤ by GitHub

各位可以發現,除了AFHTTPClient被AFHTTPRequestOperationManager取代,並且宣告跟方法略有不同之外,其他是一模一樣的。

另外signIn的部份,就由讀者自行修改練習了。