2015-02-06 3 views
0

캐싱하지 않고 URL에서 NSImage을로드하는 방법은 무엇입니까? 원격 소스에서 항상 다시로드해야합니다. 그러나 인터넷에 연결되어 있지 않아도 유효한 이미지로 끝납니다. 캐시 모드를 이미로드 된 이미지로 설정해도 아무런 효과가 없습니다. 나는 놀이터에서이 코드를 실행하면NSImage를 캐싱하지 않는 방법 byReferencingURL

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에서이 문제에 대해 Ran을 사용할 수 있습니다 (지금 생각해보십시오.).

난 당신이 thusly 히 그것을 해결할 수 있습니다 가정

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]; 

내가 그 네트워크 리소스에서 모든 시간을로드 할 것으로 판단된다.

내가 실제로 작동하는지 알아보기 위해 테스트를 한 후에 신속하게 균열을 일으킬 수 있습니다.

+0

그래,이게 효과가있을거야. 이미지와 병행하여'NSData dataWithContentsOfURL'을 통해 XML 파일을로드하고 있는데 이것은 머신이 오프라인 일 때'nil'을 리턴합니다. 그래서 이미지와도 잘 맞아야합니다. 그러나이 방법은 URL에 "캐시 버스터 (cache buster)"매개 변수를 추가하는 것과 같은 해결 방법입니다. URL에서로드 할 때 이미지가 첫 번째 위치에 캐시되는 것이 놀랍습니다. 'cacheMode'는 무엇에 좋은가요? 이미지가로드 된 후에 설정하면 효과가 없습니다. 이미 캐시되어 있지만 URL에서로드하기 전에 어떻게 설정합니까? – udondan

+0

그래, cacheMode가 다음에 캐시를 제거하지 않는다면 나는 API가 이해가 안된다는 것에 완전히 동의한다. 제 경우에는 문제가 480x680으로 가정되는 수백 개의 이미지 중 일부가 훨씬 작은 크기로 되돌아 왔지만 DPI가 더 높았습니다. 실제 픽셀 크기 대신 작은 크기로 렌더링되었습니다 (올바른 것으로 판명 됨). – owenfi

관련 문제