请参考下面的代码:
+ (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。那里面似乎有垃圾。
然后,我在代码中放入一个循环,如您所见,一次打印出一个字符。非常奇怪的是,当我使用po输出它时,我会得到:
https:// r a d ar.com/ref/go/8 4!/“
完全按照这种格式。如果我继续对字符串https://radar.com/ref/go/84/进行硬编码,包括转义字符和所有内容,那么一切都会正常工作。没有问题。如果我处理一个没有转义字符的普通字符串,它在单例中也存储得很好,没有问题。在此处输入代码
我在这里对发生的事情感到非常困惑。有人能帮上忙吗?
谢谢
发布于 2017-01-11 05:40:36
对于你收到的字符串形式的URL,在你的应用中使用它之前,你需要对它进行编码。看看下面的代码:
NSString *sampleUrl = @"https:\/\/radar.com\/ref\/go\/84\/";
NSString *encodedUrl = [sampleUrl stringByAddingPercentEscapesUsingEncoding:
NSUTF8StringEncoding];
https://stackoverflow.com/questions/41583041
复制