首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Objective C中的NSString损坏或编码问题

Objective C中的NSString损坏或编码问题
EN

Stack Overflow用户
提问于 2017-01-11 13:00:41
回答 1查看 139关注 0票数 0

请参考下面的代码:

代码语言:javascript
代码运行次数: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中查看传入数据时,它看起来如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
"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。那里面似乎有垃圾。

然后,我在代码中放入一个循环,如您所见,一次打印出一个字符。非常奇怪的是,当我使用po输出它时,我会得到:

https:// r a d ar.com/ref/go/8 4!/“

完全按照这种格式。如果我继续对字符串https://radar.com/ref/go/84/进行硬编码,包括转义字符和所有内容,那么一切都会正常工作。没有问题。如果我处理一个没有转义字符的普通字符串,它在单例中也存储得很好,没有问题。在此处输入代码

我在这里对发生的事情感到非常困惑。有人能帮上忙吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-01-11 13:40:36

对于你收到的字符串形式的URL,在你的应用中使用它之前,你需要对它进行编码。看看下面的代码:

代码语言:javascript
代码运行次数:0
运行
复制
NSString *sampleUrl = @"https:\/\/radar.com\/ref\/go\/84\/";
NSString *encodedUrl = [sampleUrl stringByAddingPercentEscapesUsingEncoding:
 NSUTF8StringEncoding];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41583041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档