2008-11-05 17 views

Répondre

30

Voici le code qui le travail de la demande de poste JSON, cadre TouchJSON est utilisé pour l'analyse du JSON, de la schwa 'merci.

NSArray *keys = [NSArray arrayWithObjects:@"username", @"password", @"preference", @"uid", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"accuser", @"accpass", @"abc_region", @"100", nil]; 
NSDictionary *theRequestDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

NSURL *theURL = [NSURL URLWithString:@"http://url.com/request.php"]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0f]; 
[theRequest setHTTPMethod:@"POST"]; 

[theRequest setValue:@"application/json-rpc" forHTTPHeaderField:@"Content-Type"]; 
NSString *theBodyString = [[CJSONSerializer serializer] serializeDictionary:theRequestDictionary]; 
NSLog(@"%@", theBodyString); 
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding]; 
// NSLog(@"%@", theBodyData); 
[theRequest setHTTPBody:theBodyData]; 

NSURLResponse *theResponse = NULL; 
NSError *theError = NULL; 
NSData *theResponseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError]; 
NSString *theResponseString = [[[NSString alloc] initWithData:theResponseData encoding:NSUTF8StringEncoding] autorelease]; 
NSLog(theResponseString); 
NSDictionary *theResponseDictionary = [[CJSONDeserializer deserializer] deserialize:theResponseString]; 
NSLog(@"%@", theResponseDictionary); 
NSString *theGreeting = [theResponseDictionary objectForKey:@"greeting"]; 
[self setValue:theGreeting forKey:@"greeting"]; 
+1

Quel est l'objectif du dictionnaire "otherRequest"? Il semble être inutilisé. –

+0

Il a été supprimé. –

3

Je ne sais pas vraiment quelle est exactement votre question. Mais google "TouchJSON" qui devrait vous aider à démarrer.

+0

Comment utiliser TouchJSON pour cela? –

0

Désolé pour les erreurs et les fuites de mémoire, mais que diriez-vous quelque chose comme:

CFURLRef url = CFURLCreateWithString(NULL, CFSTR("http://example.com/post"), NULL); 
CFHTTPMessageRef msg = CFHTTPMessageCreateRequest(
    NULL, 
    CFSTR("POST"), 
    url, 
    kCFHTTPVersion1_1); 

const char *body = "key=value&id=30293"; 
CFDataRef bodyData = CFDataCreate(NULL, body, strlen(body)); 
CFHTTPMessageSetBody(msg, bodyData); 

CFReadStreamRef myReadStream = CFReadStreamCreateForHTTPRequest(NULL, myRequest); 
CFReadStreamOpen(myReadStream); 
CFHTTPMessageRef myResponse = CFReadStreamCopyProperty(
    myReadStream, 
    kCFStreamPropertyHTTPResponseHeader); 

// 
// Handle myResponse 
// 

CFReadStreamClose(myReadStream); 
CFRelease(myReadStream); 
CFRelease(bodyData); 
CFRelease(msg); 
CFRelease(url); 
+0

Solution vraiment carbone ici - ne va pas très bien fonctionner sur l'iPhone du tout. –

+0

C'est la base de base, pas de carbone. CFNetwork (ce qui est) fonctionne très bien sur iOS. Je ne préférerais pas cela à une solution Cocoa, mais à première vue je ne vois rien de mal avec ce code. Core Foundation est très utile à certains moments. –