iOS/iPhone Passing JSON (NSJSONSerialization) Between View |
iOS/iPhone Passing JSON (NSJSONSerialization) Between View การใช้งาน JSON บน iOS นั้นจะมีความจำเป็นมากในกรณีที่ต้องการเขียน Application ติดต่อกับ Interface กับโปรแกรมอื่น ๆ เช่น การรับส่งข้อมูลระหว่าง Web Server ที่มีการใช้ JSON เป็นตัวกลาง และใน iOS ที่เขียนด้วยภาษา Objective-C ก็สามารถที่จะประยุกต์ใช้ได้ทั้ง 2 รูปแบบ คือ สามารถที่จะรับค่า JSON จาก Interface อื่น ๆ และสามารถที่จะแปลงข้อมูลให้อยู่ในรูปแบบของ JSON และส่งค่าไปยัง Inteface Application อื่น ๆ ได้เช่นเดียวกัน สำหรับการสร้างและอ่าน JSON นั้น สามารถอ่านเพิ่มเติมได้ที่บทความของ JSON กับ iOS ครับ
สำหรับบทความ JSON อ่านเพิ่มเติมได้ที่นี่
iOS/iPhone Passing JSON (NSJSONSerialization) Between View
ในบทความนี้อาจะยังไม่ได้ประยุกต์ถึงขั้นการส่งค่า JSON ไปยัง Interface อื่น แต่จะยกตัวอย่างการส่งค่า JSON ระหว่าง View เท่านั้น แต่ก็ไม่ใช่เรื่องยากที่จะนำไป Apply ใช้ เพราะเพียงแค่เข้าใจ Concept การทำงานของมัน ก็สามารถที่จะนำไปใช้ได้อย่างง่ายดาย
iOS/iPhone Passing Data Between View (Objective-C,iPhone,iPad)
การเข้ารหัส JSON ส่งค่า JSON ไปยัง View อื่น
NSMutableDictionary *element = [NSMutableDictionary dictionary];
[element setObject:[txtName text] forKey:@"Name"];
[element setObject:[txtTel text] forKey:@"Tel"];
[element setObject:[txtEmail text] forKey:@"Email"];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:element
options:NSJSONWritingPrettyPrinted
error:nil];
NSLog(@"jsonData= %@",jsonData);
NSString* jsonCode = [[[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"jsonCode= %@",jsonCode);
DetailController *view2 = [[[DetailController alloc] initWithNibName:nil bundle:nil] autorelease];
view2.json = jsonCode;
[self presentViewController:view2 animated:NO completion:NULL];
การรับค่า JSON และแสดงค่า JSON
NSString *stringData = [self.json description];
NSData *jsonData = [stringData dataUsingEncoding:NSUTF8StringEncoding];
id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
// value in key name
NSString *strName = [jsonObjects objectForKey:@"Name"];
NSString *strTel = [jsonObjects objectForKey:@"Tel"];
NSString *strEmail = [jsonObjects objectForKey:@"Email"];
lblName.text = strName;
lblTel.text = strTel;
lblEmail.text = strEmail;
Example ตัวอย่างการสร้าง JSON การอ่าน JSON และการส่งค่าระหว่าง View (JSON Between View)
เริ่มต้นด้วยการสร้าง Application บน Xcode แบบ Single View Application
เลือกและไม่เลือกรายการดังรูป
ตอนนี้ใน Project มีไฟล์ ที่เป็น Interface และ Class อยู่ 1 ชุด ซึ่งต่อไปนี้จะเรียกว่า View 1
สร้างขึ้นมาอีก 1 ชุด ซึ่งตอนนี้เป็น 2 ชุดแล้ว และเรียกว่า View 2
iOS/iPhone Multiple View (Objective-C, iPhone, iPad)
ใน View 1 ให้ออกแบบหน้าจอ Interface ดังรูป
ใน Class ของ .h ของ View 1 ให้ทำการเชื่อม IBOutlet และ IBAction ให้เรียบร้อย
ใน View 2 ให้ออกแบบหน้าจอ Interface ดังรูป
ใน Class ของ .h ของ View 2 ให้ทำการเชื่อม IBOutlet และ IBAction ให้เรียบร้อย
จากนั้นให้เขียน Code ทั้งหมดดังนี้
ViewController.h
//
// ViewController.h
// passingJSONView
//
// Created by Weerachai on 12/4/55 BE.
// Copyright (c) 2555 Weerachai. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
IBOutlet UITextField *txtName;
IBOutlet UITextField *txtTel;
IBOutlet UITextField *txtEmail;
}
- (IBAction)btnSubmit:(id)sender;
@end
ViewController.m
//
// ViewController.m
// passingJSONView
//
// Created by Weerachai on 12/4/55 BE.
// Copyright (c) 2555 Weerachai. All rights reserved.
//
#import "ViewController.h"
#import "DetailController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)btnSubmit:(id)sender {
NSMutableDictionary *element = [NSMutableDictionary dictionary];
[element setObject:[txtName text] forKey:@"Name"];
[element setObject:[txtTel text] forKey:@"Tel"];
[element setObject:[txtEmail text] forKey:@"Email"];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:element
options:NSJSONWritingPrettyPrinted
error:nil];
NSLog(@"jsonData= %@",jsonData);
NSString* jsonCode = [[[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"jsonCode= %@",jsonCode);
DetailController *view2 = [[[DetailController alloc] initWithNibName:nil bundle:nil] autorelease];
view2.json = jsonCode;
[self presentViewController:view2 animated:NO completion:NULL];
}
- (void)dealloc {
[txtName release];
[txtTel release];
[txtEmail release];
[super dealloc];
}
@end
DetailController.h
//
// DetailController.h
// passingJSONView
//
// Created by Weerachai on 12/4/55 BE.
// Copyright (c) 2555 Weerachai. All rights reserved.
//
#import "ViewController.h"
@interface DetailController : ViewController
{
IBOutlet UILabel *lblName;
IBOutlet UILabel *lblTel;
IBOutlet UILabel *lblEmail;
}
@property (strong, nonatomic) id json;
@end
DetailController.m
//
// DetailController.m
// passingJSONView
//
// Created by Weerachai on 12/4/55 BE.
// Copyright (c) 2555 Weerachai. All rights reserved.
//
#import "DetailController.h"
@interface DetailController ()
@end
@implementation DetailController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSString *stringData = [self.json description];
NSData *jsonData = [stringData dataUsingEncoding:NSUTF8StringEncoding];
id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
// value in key name
NSString *strName = [jsonObjects objectForKey:@"Name"];
NSString *strTel = [jsonObjects objectForKey:@"Tel"];
NSString *strEmail = [jsonObjects objectForKey:@"Email"];
//NSLog(@"MemberID = %@",strName);
//NSLog(@"Name = %@",strTel);
//NSLog(@"Tel = %@",strEmail);
lblName.text = strName;
lblTel.text = strTel;
lblEmail.text = strEmail;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)dealloc {
[lblName release];
[lblTel release];
[lblTel release];
[lblEmail release];
[super dealloc];
}
@end
Screenshot
แสดง View 1 เมื่อคลิกที่ Button จะมีการนำข้อมูลที่ได้เจ้ารหัสเป็น JSON และส่งไปยัง View 2
View 2 รับค่า JSON และอ่านค่า JSON เพื่อแสดงบน Label
ใน NSLog จะเห็นว่าจะมีการเข้ารหัส JSON ซึ่งปกติแล้ว เมื่อใช้ NSData ในการเข้ารหัส JSON ด้วย NSJSONSerialization จะไม่สามารถอ่านข้อความเหล่านั้นออกได้ ซึ่งจะต้องแปลงให้เป็น NSString เสียก่อน
เพิ่มเติม
บทความนี้ได้เน้นที่จะให้เข้าใจเกี่ยวกับการรับค่าจาก Input และการเข้ารหัส JSON และตัวอย่างการส่งค่า JSON ไปยัง View อื่น ๆ เพื่อให้เป็นแนวทางในการที่จะพัฒนาโปรแกรมเกี่ยวกับการรับส่งข้อมูลในรูปแบบ JSON ให้มากยิ่งขึ้น และเราสามารถที่จะนำความรู้นี้ไป Apply ใช้กับการเขีนโปรแกรมอื่น ๆ เช่น การส่งค่า JSON ไปยัง Interface ของ Application อื่น ๆ ที่อยู่คนล่ะ Platform หรืออยู่บน Web Server เป็นต้น
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2012-12-06 10:34:37 /
2017-03-26 09:05:13 |
|
Download : |
|
|
Sponsored Links / Related |
|
|
|
|
|
|
|