본문 바로가기

Mac&iOS

initWithContentsOfURL의 캐싱 문제

기존에는 initWithContentsOfURL를 이용해서 데이터를 가져왔는데, 이게 Cache된 데이터를 가져오는 문제가 있다는 것을 알았다.


기존에 서버에 최신 버전정보가 있는 xml을 두고 initWithContentsOfURL로 데이터 값을 읽는 코드를 작성했었다.


NSString* newVersion = [NSString stringWithFormat:@"%@/NewVersion.xml", liveUpdateServer];

NSURL* versionURL = [NSURL URLWithString:newVersion];

NSXMLDocument* doc = [[NSXMLDocument alloc] initWithContentsOfURL:versionURL

                                                          options:NSXMLDocumentTidyXML

                                                            error:nil];

NSArray* arrVersion = [doc nodesForXPath:@"//NewVersion" error:nil];

[doc release];


NewVersion.xml만 수정해서 서버에 재업로드 하고 테스트 한 결과, 

재업로드 전의 NewVersion.xml에 있던 NewVersion값을 가져오는 문제가 있었다.


혹시나 업로드가 잘못되었나 해서 해당 url을 가지고 chrome에서 직접 접근하였으나 xml은 정상적으로 업로드 된 것을 확인하였다.


캐싱 이전 데이터를 가져오는 것으로 판단했다.


그래서  NSData의 NSDataReadingUncached 옵션을 이용해서 cache가 안된 데이터를 가져오니 정상적으로 동작하는 것을 확인 할 수 있었다.


NSURL* versionURL = [NSURL URLWithString:newVersion];

 

NSString* newVersion = [NSString stringWithFormat:@"%@/NewVersion.xml", liveUpdateServer];

NSURL* versionURL = [NSURL URLWithString:newVersion];

    

NSData *data = [[NSData alloc] initWithContentsOfURL:versionURL

                                             options:NSDataReadingUncached

                                                error:nil];

NSXMLDocument* doc = [[NSXMLDocument alloc] initWithData:data

                                                    options:NSXMLDocumentTidyXML

                                                          error:nil];

[data release];

NSArray* arrVersion = [doc nodesForXPath:@"//NewVersion" error:nil];

[doc release];




Copyright © 2015 by ZAMCOM, All rights reserved.