0

我正在尝试从 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的URL ...

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;
                });
            });
        }
    }
4

3 回答 3

1

%0A%20%20%20%20%22代表 a\n后跟 4 个空格,然后". 这与控制台中的描述一致。您是否曾经NSJSONSerialization从 JSON 数据中获取 URL?

于 2013-11-09T03:39:17.993 回答
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);

顺便说一句,[NSString stringWithFormat:@"%@"...没有必要。

于 2013-11-09T04:18:51.657 回答
1

您显示的日志输出似乎是一个数组,因为它在单独的行上有带括号的字符串。

如果它已经是一个有效的 URL 字符串,则不需要对字符串进行编码,实际上这样做是错误的并且会破坏事情。

于 2013-11-09T05:03:05.317 回答