Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C中NSString损坏或编码问题_Ios_Objective C_Encoding_Nsstring_Nsstringencoding - Fatal编程技术网

Ios 目标C中NSString损坏或编码问题

Ios 目标C中NSString损坏或编码问题,ios,objective-c,encoding,nsstring,nsstringencoding,Ios,Objective C,Encoding,Nsstring,Nsstringencoding,请参阅下面的代码: + (void)splashDataFromJSON:(NSData *)objectNotation error:(NSError **)error { NSError *localError = nil; NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:objectNotation options:0 error:&localError]; if (

请参阅下面的代码:

+ (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];
}
如您所见,我进一步将NSString放入具有NSString属性的单例中。这里没有什么异常。然后我继续检索它,以确保一切正常。除此之外,该计划还在继续。在另一个类中,我希望检索这些信息,当我尝试这样做时,它抛出EXC_BAD_访问。里面好像有垃圾

然后,我在代码中加入一个循环,正如您所看到的那样,一次打印一个字符。很奇怪,当我用po打印出来时,我得到:

https://  r  a  d ar  com/ref/go/8 4/"

正是这种格式。如果我继续硬编码字符串https://radar.com/ref/go/84/ -包括转义字符和所有内容,所有都可以正常工作。没有问题。如果我处理没有转义字符的正常字符串,它也可以在单例中正常存储,没有问题。在此处输入代码

我在这里很困惑到底发生了什么事。有人能帮忙吗


感谢您

将您收到的URL作为字符串,在将其用于应用程序之前需要对其进行编码。请查看以下代码:

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

谢谢你的评论。我以前尝试过这个,现在再次检查。同样的问题。是否需要使用其他编码?请尝试人类可读的URL字符串,如
NSString*sampleUrl=@”https://radar.com/ref/go/84/“;
不应该是
字符!='!”
?(比较
字符的单引号)?如果您将
objectNotation
转换为
NSString
alloc
/
initWithData:encoding:
,使用UTF8),它是否有`````?抱歉,该代码已被删除,而且几乎不相关。我正忙于处理它。
NSString *sampleUrl = @"https:\/\/radar.com\/ref\/go\/84\/";
NSString *encodedUrl = [sampleUrl stringByAddingPercentEscapesUsingEncoding:
 NSUTF8StringEncoding];