2016-10-10 6 views
0

別のアプリケーションを開くためにNSURLを構築しようとすると、私は(null)エラーを受けています。JSONを含むNSURLがnullを返す

URLは

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

をする必要がありますが、私は私のURLを構築しようとすると、それは常にnullです。

最初はURL自体と関係があると思っていましたが、これは例hereから取得したものと同じです。

別の考えでは、IOSがJSONの二重引用符に問題がありましたが、私は%22に置き換えましたが、これも機能しません。

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]; 

私が間違っているところ私にはわからないと誰かが任意のアイデアを得た場合、私は喜んでいるだろう。ここでは

は私がURLを構築するコードは、あります。

ありがとうございます。

+0

コードで警告/エラーがスローされますか? "NSString * encodedQueryString = [NSString stringWithFormat:@"?eventSourceId =%@&eventID =%d&eventType = 0&json =%@ "、eventSourceId、_eventId、jsonString]; [NSCharacterSet URLQueryAllowedCharacterSet]]' should ... – Larme

+0

本当に送信できますか? JSONをURLパラメータとして使用しますか? – Droppy

+0

速い返答をありがとう。私は私の誤りを見つけました。中括弧と 'encodedQueryString'を' [jsonString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]に置き換えなければならない問題。このようにして、すべての中カッコと二重引用符がエンコードされ、有効なURLが作成されます。しかし、私はまだ問題を抱えている、他のアプリは本当にURLを処理していない。 – Syrinscaper

答えて

0

URLを文字列にフォーマットするのではなく、実際にはNSURLComponentsを使用してください。

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; 

あなたがそのようにURLを構築したら、それはあなたの文字列がホスト部分を持っていない(またはより正確に、あなたのパラメータの一つは、ホスト部として使用されている)ことが明らかになりました。

JSONをURLパラメータとして送信できないというその他のコメントは正しくありません。クエリ文字列を解析している相手側のシステムがそれを処理できる限り、URLパラメータとして必要なものを送信できます。

+0

ありがとうございます。エラーが見つかりました。問題は 'eventSourceId'でした。これは数字でなければならず、これが問題の原因でした。 – Syrinscaper

+0

あなたの解決策にもう一つメモがあります。私が作成したURLには2つのスラッシュがありませんでしたので、それらには必要と思われる 'components.host = @" ";"を追加しました。 – Syrinscaper

関連する問題