2008-11-05 1 views

Antwort

30

Dies ist der Code, die Arbeit für JSON Post-Anforderung, TouchJSON Rahmen für die Parsen der JSON, dank verwendet wird ‚Schwa‘.

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

Was ist der Zweck des Wörterbuchs "otherRequest"? Es scheint ungenutzt zu sein. –

+0

Es wurde entfernt. –

3

Nicht wirklich sicher, was Ihre Frage genau ist. Aber google "TouchJSON", die dir beim Einstieg helfen sollte.

+0

Wie können Sie TouchJSON verwenden, um dies zu tun? –

0

Sorry für Fehler und Speicherlecks, aber wie wäre es so etwas wie:

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

Wirklich Carbon-ish-Lösung hier - auf dem iPhone überhaupt nicht sehr gut funktionieren. –

+0

Das ist Core Foundation, nicht Carbon. CFNetwork (was ist) funktioniert gut auf iOS. Ich würde es nicht einer Cocoa-Lösung vorziehen, aber auf den ersten Blick sehe ich mit diesem Code nichts falsch. Core Foundation ist manchmal sehr nützlich. –

Verwandte Themen