Пожалуйста, смотрите код ниже:Коррупция NSString или проблемы кодирования в Objective C
+ (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. Там, кажется, есть мусор.
Затем я помещаю в цикл код, который вы можете распечатать, по одному за раз. Очень странно, когда я печатаю, что с помощью ро я получаю:
https: // г d ar.com/ref/go/8 4 /»
Именно в этом формате!. Если я затем перейду к hardcode строке https://radar.com/ref/go/84/ - включая escape-символы и все, то все работает нормально. Нет проблем. Если я обрабатываю нормальную строку, входящую без escape-символов, она хранит штраф в одиночном тоне нет, введите код здесь
Я довольно преуменьшен здесь относительно того, что происходит. Может кто-нибудь помочь?
Спасибо
Не должно быть 'character! = '!''? (одинарная цитата для сравнения 'char')? Если вы конвертируете 'objectNotation' в' NSString' ('alloc' /' initWithData: encoding: 'с UTF8), имеет ли он' \\ '? – Larme
Извиняется, что код был удален - и почти не имеет значения. Я был занят игрой вокруг. – Zephyr