破損

2017-01-11 20 views
0

は、以下のコードを参照してください。破損

+ (void)splashDataFromJSON:(NSData *)objectNotation error:(NSError **)error 
{ 
    NSError *localError = nil; 
    NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:objectNotation options:0 error:&localError]; 

    if (localError != nil) { 
     *error = localError; 
    } 

    NSMutableArray* btms = [[NSMutableArray alloc] init]; 
    NSMutableDictionary* btmManufacturerResolutionDictionary = [[BTMCache sharedManager] btmManufacturerResolutionDictionary]; 

    NSArray *results = [parsedObject valueForKey:@"results"]; 
    NSLog(@"Count %d", parsedObject.count); 

    NSString* imageBaseUrl = [[parsedObject valueForKey:@"general"] valueForKey:@"image_base_url"]; 
    imageBaseUrl = [imageBaseUrl stringByAppendingString:@"hdpi/"]; 
    NSString* splashImageName = [[[parsedObject valueForKey:@"general"] valueForKey:@"splash"] valueForKey:@"img"]; 
    NSString* splashAdvertiserURL = [[[[parsedObject valueForKey:@"general"] valueForKey:@"splash"] valueForKey:@"url"] copy]; 

    NSMutableString* appendedString = [[NSMutableString alloc] init]; 
    for(int i =0 ;i<[splashAdvertiserURL length]; i++) { 
     char character = [splashAdvertiserURL characterAtIndex:i]; 
     printf(&character); 
     sleep(0.1); 
     if (character != "!") 
     { 
      [appendedString appendFormat:@"%c", character]; 
     } 
    } 

    [[SplashData sharedManager] setSplashAdvertiserURL:appendedString]; 
    [[SplashData sharedManager] setSplashImageName:splashImageName]; 

    splashAdvertiserURL = [[SplashData sharedManager] splashAdvertiserURL]; 
} 

の注目点がsplashAdvertiserURLです。このデータを受け取り、それをpoで印刷すると、 "https://radar.com/ref/go/84/"となります。これはうまく、期待されていたものです。私はJSONLintで着信データを見ると、それは次のようになります。

"general": { 
     "image_base_url": "https:\/\/radar.com\/img\/manufacturers\/", 
     "splash": { 
      "img": "image1.png", 
      "url": "https:\/\/radar.com\/ref\/go\/84\/" 
     } 
    }, 

あなたが見ることができるように、私はNSStringのプロパティでシングルトンにNSStringのを入れてさらに上。ここには何も異常はありません。私はそれからすべてを確認するためにそれを取得するために進みます。これに加えて、プログラムは続行されます。別のクラスでは、この情報を取得したいと思います。その情報を取得しようとすると、EXC_BAD_ACCESSがスローされます。そこにはごみがあるようです。

私は一度に1つずつ文字を印刷するのがわかるように、コードにループを入れます。私はPOを使用してそれをプリントアウトする際に非常に不思議なことに、私が手:

HTTPSを:// R D ar.com/ref/go/8 4 /」ちょうどその形式で

!。エスケープ文字やすべてを含む文字列をhttps://radar.com/ref/go/84/にハードコードすると、問題はありません。エスケープ文字を含まない通常の文字列を処理すると、シングルトンでも問題はありません。ここにコードを入力してください

私は何が起こっているかについてここでかなり困惑しています。誰かを助けることができますか?

ありがとうございました

+0

「文字!= '!' 'ではありませんか? ( 'char'を比較するための一重引用符)? 'objectNotation'を' NSString'( 'alloc' /' initWithData:encoding: 'UTF8)に変換すると' \\ 'はありますか? – Larme

+0

申し訳ありませんが、そのコードは削除されました - そしてほとんど無関係です。私は周りを遊んで忙しかったです。 – Zephyr

答えて

0

文字列として受け取ったURLについては、アプリケーションで使用する前にエンコードする必要があります。以下のコードを見てください:

NSString *sampleUrl = @"https:\/\/radar.com\/ref\/go\/84\/"; 
NSString *encodedUrl = [sampleUrl stringByAddingPercentEscapesUsingEncoding: 
NSUTF8StringEncoding]; 
+0

コメントありがとうございました。私はこれを前に試して、もう一度チェックしました。同じ問題。私が使用する必要がある別のエンコーディングはありますか? – Zephyr

+0

'NSString * sampleUrl = @"のような人間が読めるURL文字列を試してください。https://radar.com/ref/go/84/ ";' –