我正在尝试从twitter加载图片。如果我只是在没有编码的情况下使用json结果中的URL,那么在dataWithContentsOfURL
中,我会得到nil URL参数。如果我编码它,我会得到以下
%0A%20%20%20%20%22http://example.com/example.jpg%22%0A
我知道我可以使用rangeOfString:
或stringByReplacingOccurrencesOfString:
但是我可以确定它会一直相同吗,还有另一种处理方式吗?为什么这会发生在我的Twitter响应和不是我的Instagram响应?
我也试过
stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]
它什么也没做。
这是直接来自json的网址......
2013-11-08 22:09:31:812 JaVu[1839:1547] -[SingleEventTableViewController tableView:cellForRowAtIndexPath:] [Line 406] (
"http://pbs.twimg.com/media/BYWHiq1IYAAwSCR.jpg"
)
这是我的代码
if ([post valueForKeyPath:@"entities.media.media_url"]) {
NSString *twitterString = [[NSString stringWithFormat:@"%@", [post valueForKeyPath:@"entities.media.media_url"]]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
twitterString = [twitterString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", twitterString);
if (twitterString != nil){
NSURL *twitterPhotoUrl = [NSURL URLWithString:twitterString];
NSLog(@"%@", twitterPhotoUrl);
dispatch_queue_t queue = kBgQueue;
dispatch_async(queue, ^{
NSError *error;
NSData* data = [NSData dataWithContentsOfURL:twitterPhotoUrl options:NSDataReadingUncached error:&error];
UIImage *image = [UIImage imageWithData:data];
dispatch_sync(dispatch_get_main_queue(), ^{
[streamPhotoArray replaceObjectAtIndex:indexPath.row withObject:image];
cell.instagramPhoto.image = image;
});
});
}
}
答案 0 :(得分:1)
%0A%20%20%20%20%22
代表\n
,后跟4个空格,然后是"
。这与控制台中的描述一致。您是否使用NSJSONSerialization
从JSON数据中获取URL?
答案 1 :(得分:1)
不是答案,而是解决错误的一步,:将代码更改为此并发布输出。将多个方法调用合二为一会使调试更加困难。
NSLog(@"post: '%@", post);
NSString * twitterString;
twitterString = [post valueForKeyPath:@"entities.media.media_url"];
NSLog(@"twitterString 1: '%@", twitterString);
twitterString = [twitterString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"twitterString 2: '%@", twitterString);
twitterString = [twitterString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"twitterString 3: '%@", twitterString);
BTW,[NSString stringWithFormat:@"%@"...
不是必需的。
答案 2 :(得分:1)
您显示的日志输出似乎是一个数组,因为它的字符串在一个单独的行上有括号。
如果字符串已经是有效的URL字符串,那么你不应该对字符串进行编码,事实上这样做是错误的并且会破坏它。