2016-10-10 2 views
0

Ich bekomme immer einen (null) Fehler, wenn ich versuche, meine NSURL zu erstellen, um eine andere App zu öffnen.NSURL mit JSON gibt null zurück

Die URL-

ms-test-app://eventSourceId=evtSrcId&eventID=13675016&eventType=0&json={"meterresults":[{"clean":"2","raw":"2","status":"0"}]}

sein, aber wenn ich versuche, meine URL zu erstellen, es ist immer null.

Zuerst dachte ich, dass es etwas mit der URL selbst zu tun hat, aber es ist das gleiche wie ich es aus dem Beispiel here.

Ein anderer Gedanke war, dass IOS einige Probleme mit den Anführungszeichen im JSON hatte, aber ich ersetzte sie durch %22, aber das funktioniert auch nicht. Hier

ist der Code, wo ich die URL erstellen:

NSString *jsonString = [NSString stringWithFormat:@"{%22meterresults%22:[{%22clean%22:%22%@%22,%22raw%22:%22%@%22,%22status%22:%22%@%22}]}", cleanReadingString, rawReadingString, status]; 

NSLog(@"JSON= %@",jsonString); 

//Send the result JSON back to the movilizer app 
NSString *eventSourceId = @"evtSrcId"; 
NSString *encodedQueryString = [NSString stringWithFormat:@"?eventSourceId=%@&eventID=%d&eventType=0&json=%@", 
           eventSourceId, _eventId, jsonString];[NSCharacterSet URLQueryAllowedCharacterSet]] 
NSString *urlStr = [NSString stringWithFormat:@"%@%@", 
        [_endpointUrls objectForKey:[NSNumber numberWithInt:(int)_selectedEndpoint]], 
        encodedQueryString]; 
NSURL *url = [NSURL URLWithString:urlStr]; 

Ich weiß nicht, wo ich falsch bin, und ich würde mich freuen, wenn jemand eine Idee bekam.

Vielen Dank im Voraus.

+0

Erzeugt Ihr Code Warnungen/Fehler? Weil 'NSString * encodedQueryString = [NSString StringWithFormat: @"? EventSourceId =% @ & eventID =% d & eventType = 0 & json =% @ ", eventSourceId, _eventId, jsonString]; [NSCharacterSet URLQueryAllowedCharacterSet]] sollte ... – Larme

+0

Kannst du wirklich senden JSON als URL-Parameter? – Droppy

+0

Danke für die schnellen Antworten. Ich habe meinen Fehler gefunden. Das Problem, wo die geschweiften Klammern und ich 'codedQueryString' durch' [jsonString stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLQueryAllowedCharacterSet]] 'ersetzen musste. Auf diese Weise werden alle geschweiften Klammern und doppelten Anführungszeichen codiert, wodurch eine gültige URL erstellt wird. Aber ich habe immer noch das Problem, dass die andere App die URL nicht wirklich verarbeitet. – Syrinscaper

Antwort

0

Sie sollten wirklich NSURLComponents verwenden, um URLs zu erstellen, anstatt zu versuchen, sie in einer Zeichenfolge zu formatieren.

NSDictionary* jsonDict = @{@"clean": @"2", @"raw": @"2", @"status": @"0"}; 
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:0 error:NULL]; 
    NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    NSURLComponents* components = [[NSURLComponents alloc] init]; 
    components.scheme = @"ms-test-app"; 
    components.queryItems = @[ 
         [[NSURLQueryItem alloc] initWithName:@"eventSourceId" value:eventSourceId], 
         [[NSURLQueryItem alloc] initWithName:@"eventID" value:@(_eventId).stringValue], 
         [[NSURLQueryItem alloc] initWithName:@"json" value:jsonString] 
         ]; 
    NSURL* url = components.URL; 

Sobald Sie die URL erstellen, die Art und Weise, ist es offensichtlich wird, dass die Zeichenfolge nicht einen Hostteil hat (oder genauer gesagt, eines Ihres Parameter wird als Host-Teil verwendet wird).

Die anderen Kommentare, dass JSON nicht als URL-Parameter gesendet werden kann, sind falsch. Solange das System auf der anderen Seite, die die Abfragezeichenfolge analysiert, damit umgehen kann, können Sie beliebige Daten als URL-Parameter senden.

+0

Vielen Dank. Ich habe den Fehler gefunden. Das Problem war die 'eventSourceId', die eine Nummer sein muss und das war die Ursache des Problems. – Syrinscaper

+0

Ich habe eine zusätzliche Notiz zu Ihrer Lösung erhalten. Der URL, die ich erstellt habe, fehlten die zwei Schrägstriche, also fügte ich 'components.host = @" ";' hinzu, das für diese notwendig zu sein scheint. – Syrinscaper