2015-02-06 63 views
0

如何从URL加载NSImage而不缓存?它应该始终从远程源重新加载。但即使我没有连接到互联网,我也会得到一个有效的图像。将缓存模式设置为已加载的图像不起作用。如何不缓存由参考URL加载的NSImage

let url = NSURL(string: "http://thecybershadow.net/misc/stackoverflow.png") 
let img = NSImage(byReferencingURL: url!) 
img.cacheMode = NSImageCacheMode.Never 
NSLog("Found image with size \(img.size)") 

当我运行这个片段在操场,它实际上从不缓存,即使我设置NSImageCacheMode.Always

但是,当我在我的应用程序中运行此代码段时,即使我没有连接到互联网,它始终会返回有效图像,

我知道我可以简单地使用一个随机数或时间戳的高速缓冲存储器参数。但这是一个理论上的问题,我对如何防止缓存感兴趣。

回答

1

在objc中也遇到了这个问题(我想,现在尝试这个修复)。

我认为你可以解决它正是如此:

NSString *imgURL = @"http://thecybershadow.net/misc/stackoverflow.png"; 
NSURL *u = [NSURL URLWithString:imgURL]; 

NSError *error; 
NSData *d = [NSData dataWithContentsOfURL:u 
            options:NSDataReadingUncached 
            error:&error]; 
NSImage *image = [[NSImage alloc] initWithData:d]; 

我相信一定会从网络资源每次加载。

我在做了一些测试以确定它是否真正起作用之后,我可能会在swift上采取一些措施。

+0

是的,我相信这会奏效。与图像平行,我通过'NSData dataWithContentsOfURL'加载一个XML文件,当机器脱机时这个返回'nil'。所以它绝对应该与图像一起工作。但是,这是一种解决方法,与向URL添加“缓存拦截器”参数相同。我很惊讶,当从URL加载时,图像缓存在第一位。什么是'cacheMode'的好处?在加载图片后设置它不起作用 - 它已经被缓存 - 但是如何在从URL加载之前设置它? – udondan 2015-02-12 11:00:59

+0

是的,除非设置cacheMode清除缓存下次我完全同意API没有意义。在我的情况下,这个问题是几百张图片中的几张都是480x680,但是尺寸小得多,但是DPI更高。它们呈现的是小而不是实际的像素尺寸(事实证明这是正确的)。 – owenfi 2015-02-12 11:27:17