このやり方が正しいのかイマイチわからないのが1人で作業するとこの難しさだと感じてます。
だれか正攻法教えてください。
まずはサーバー側ではPHPでXML形式のデータを作成。
createXML.php
<?php include_once "DatabaseClass.php"; if(!empty($_POST)){ $database = new Database; $table = "user_name"; $email = $_POST['email']; $password = $_POST['password']; $select = sprintf('SELECT id, name, picture FROM %s WHERE email="%s" AND password="%s"', mysql_real_escape_string($table), mysql_real_escape_string($email), mysql_real_escape_string($password)); $row = $database->array_select($select); if($row != NULL){ $xml = "\n"; $xml.= ''; $xml.="\n"; foreach($row as $value){ $xml.=" \n"; echo $xml; } //if($row != NULL) $database->close(); } ?>\n"; $id=$value["id"]; $xml.="\t \n"; }//foreach $xml.="$id \n"; $name=$value["name"]; $xml.="\t$name \n"; $pict=$value["picture"]; $xml.="\t$pict \n"; $xml.="
iPhoneからはPOSTメソッドでデータを送信し、返り値をNSXMLParserオブジェクトに代入してデータを取得する。
XMLParseAppDelegate.m
- (void)loadData{ NSURL *url = [[NSURL alloc]initWithString:@"http://localhost:8888/createXML.php"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url]; // MethodにPOSTを指定する。 request.HTTPMethod = @"POST"; NSString *email = @"momo@momochibi.com"; NSString *password = @"momo"; NSString *body = [NSString stringWithFormat:@"email=%@&password=%@",email,password]; request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding]; //XML形式のデータを取得 NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSXMLParser *parser = [[NSXMLParser alloc]initWithData:returnData]; [parser setDelegate:self]; [parser parse]; } // XMLのパース開始 - (void)parserDidStartDocument:(NSXMLParser *)parser { // 初期化処理 //statuses = [NSMutableArray array]; members = [NSMutableArray array]; membersPicture = [NSMutableArray array]; inIdElement = NO; inNameElement = NO; inPictElement = NO; } // XMLのパース終了 - (void)parserDidEndDocument:(NSXMLParser *)parser { // 取得したデータを出力する for (NSString *member in members) { NSLog(@"%@", member); } } // 要素の開始タグを読み込み - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"id"]) { // nameタグの中に入った inIdElement = YES; ID = [NSMutableString string]; } if ([elementName isEqualToString:@"name"]){ inNameElement =YES; name = [NSMutableString string]; } if( [elementName isEqualToString:@"pict"] ){ inPictElement = YES; pict = [NSMutableString string]; } } // 要素の閉じタグを読み込み - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"member"]) { // memberタグが終わるタイミングで、membersにメンバーを追加する NSString *s = [NSString stringWithFormat:@"%@: %@ : %@", ID, name, pict]; [members addObject:s]; NSString *ps = [NSString stringWithFormat:@"%@",pict]; [membersPicture addObject:ps]; } else if ([elementName isEqualToString:@"id"]) { // idタグから出た! inIdElement = NO; } else if ([elementName isEqualToString:@"name"]) { // nameタグから出た! inNameElement = NO; } else if ([elementName isEqualToString:@"pict"]) { inPictElement = NO; } } // テキストデータ読み込み - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { // テキストデータは複数回に分けて呼び出されることがある if (inIdElement) { [ID appendString:string]; } else if (inNameElement) { [name appendString:string]; } else if (inPictElement){ [pict appendString:string]; } }XMLParseAppDelegate.h
#import <oundation/Foundation.h> @interface XMLParseAppDelegate : NSObject<UIApplicationDelegate, NSXMLParserDelegate> { NSMutableArray *members; BOOL inIdElement; BOOL inNameElement; BOOL inPictElement; NSMutableString *name; NSMutableString *ID; NSMutableString *pict; } - (void)loadData; @endこんな感じでデータをiPhoneからデータベースに接続して データを取得したりしてます。
0 件のコメント:
コメントを投稿