I JSON-Daten von einer URL ist abgerufen werden, wie so formatiert ist:POST JSON-Daten in Objekt bestehenden
{"zoneresponse":
{"tasks":
[{"datafield1":"datafor1",
"datafield2":"datafor2",
"datafield3":"datafor3",...
}]
}}
Ich habe keine Kontrolle über die Struktur, wie sie von einem privaten API sind.
Wie füge ich Daten in ein ausgewähltes Datenfeld eines vorhandenen Objekts ein?
Ich habe dies versucht:
self.responseData = [NSMutableData data];
//testingURL is the api address to the specific object in tasks
NSURL *url = [NSURL URLWithString:testingURL];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[[[params objectForKey:@"zoneresponse"] objectForKey:@"tasks"] setValue:@"HelloWorld" forKey:@"datafield1"];
//HAVE TRIED setObject: @"" objectForKey: @"" as well
//*****PARAMS IS EMPTY WHEN PRINTED IN NSLog WHICH IS PART OF THE ISSUE - SETTING VALUE DOES NOT WORK
NSError * error = nil;
NSLog(@"Params is %@", params);
NSData *requestdata = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
NSMutableURLRequest *request;
request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", [requestdata length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestdata];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(conn) {
NSLog(@"Connection Successful, connection is: %@", conn);
} else {
NSLog(@"Connection could not be made");
}
die Verbindung hergestellt wird, aber die Wörterbuch params ist leer, wenn sie gedruckt (die setValue wird nicht angezeigt), und wird die Eingabe keine Daten in den Bereich I auszuwählen.
Ich habe diese Links überprüft, aber nichts erklärt, ob es in das richtige Feld eingefügt wird und impliziert, dass es ein neues Objekt erstellen wird, anstatt das vorhandene zu aktualisieren.
How to update data on server db through json api?
How to send json data in the Http request using NSURLRequest
Delegatmethoden
//any time a piece of data is received we will append it to the responseData object
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.responseData appendData:data];
NSError *jsonError;
id responseDict =
[NSJSONSerialization JSONObjectWithData:self.responseData
options:NSJSONReadingAllowFragments
error:&jsonError];
NSLog(@"Did Receive data %@", responseDict);
}
//if there is some sort of error, you can print the error or put in some other handling here, possibly even try again but you will risk an infinite loop then unless you impose some sort of limit
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
// Clear the activeDownload property to allow later attempts
self.responseData = nil;
NSLog(@"Did NOT receive data ");
}
//connection has finished, the requestData object should contain the entirety of the response at this point
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSError *jsonError;
id responseDict =
[NSJSONSerialization JSONObjectWithData:self.responseData
options:NSJSONReadingAllowFragments
error:&jsonError];
if(responseDict)
{
NSLog(@"%@", responseDict);
}
else
{
NSLog(@"%@", [jsonError description]);
}
//clear out our response buffer for future requests
self.responseData = nil;
}
Die erste Methode hier heißt es, dass Daten mit "Erhielten Daten (null)" empfangen wurde, ist kein Fehler mit Verbindung jedoch die Die finale Methode gibt die Fehlermeldung "JSON-Text startet nicht mit Array oder Objekt und Option, um nicht gesetzte Fragmente zuzulassen" aus, was verständlich ist, da keine Daten oder Objekte gesendet werden.
Wie füge ich Daten in ein ausgewähltes Feld eines vorhandenen Objekts ein?
, wo und wie soll man anfangen den ** conn **? Ich meine [conn Start] –
@VivekMolkar Ich habe dies innerhalb einer (IBAction) -Methode und ich nehme an, es verbindet sich autonom auf der Grundlage meiner Rückkehr Methoden '- (void) Verbindung: (NSURLConnection *) Verbindung didReceiveData: (NSData *) data' , '- (void) Verbindung: (NSURLConnection *) Verbindung didFailWithError: (NSError *) error' und' - (void) connectionDidFinishLoading: (NSURLConnection *) Verbindung' –
Nein, Sie müssen eine Codezeile setzen '[conn start ] 'um die Verbindung herzustellen. ** conn ** allein nicht initiiert. –