2015-02-06 62 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