2012-08-06 4 views
0

현재 Phonegap 1.4.1을 사용하는 모바일 앱에서 작업하고 있습니다. iOS (현재 5.1 사용)에서는 앱이 localStorage의 모든 데이터를로드하지 않습니다.부분적으로 검색된 localStorage 데이터 만

앱에서 내가 지금처럼 로컬 스토리지에 플래그를 설정 사용되는 처음 :

나는 또한 항목을 설정
window.localStorage.setItem("myFlag", "true"); 

"ItemA", "ItemB"와 같은 방법으로 "ItemC". 이러한 키/값 쌍 각각은 앱 사용 중에 서로 다른 시간에 설정되므로 설정 순서가 정의되어 있지 않습니다.

내 문제는 이것이다 : 나는 응용 프로그램을 다시 설치하는 경우, 먼저 기존 사본을 삭제하지 않고 앱이 더 이상 "MyFlag", "ItemB"또는 "ItemC"를보고

- 그것은 볼 않습니다 "ItemA". window.localStorage.length을 사용하면 4를 반환 할 때 1이 반환됩니다. 앱의 데이터 파일을 내보내고 SQLite Inspector (앱 스토어의 앱)로 file__0.localstorage 파일을 검사하고 4 개의 키/값 쌍을 모두 표시합니다.

iOS 5.1 이상에서는 localstorage를 Cache 폴더로 이동 했으므로 here과 같이 file__0.localstorage 파일 백업을 구현했습니다. 기본적으로 localstorage db를 app 일시 중지 및 종료시 Documents 폴더로 복사하고 webViewDidStartLoad 실행시 Cache 폴더로 복사합니다. 이 부분은 정상적으로 작동하므로 문제가있는 프로 시저가 있다고 생각하지 않습니다. 프로 시저를 추가하기 전에 문제가 발생했습니다.

+0

앱을 다시 설치하기 전에'window.localStorage.length'가 올바르게 보이십니까? –

+0

예. 그리고 localStorage 객체의 JSON.string 버전을 출력하면 모든 속성이 표시됩니다. 응용 프로그램을 다시 설치 한 후에는 "ItemA"만 표시됩니다. –

+0

그래서 나에게 그랬듯이 이것은 다른 사람들에게 신비한 것처럼 보인다. –

답변

1

이 결과는 here으로보고 된 Cordova (Phonegap) 버그의 결과입니다. 그래서 Apple이 file__0.localstorage 파일의 위치를 ​​Cache 디렉토리에 옮기는 작업과 Apple 버전의 새로운 버전으로 업그레이드 할 때 Apple 용 번들 ID가 변경되는 Apple 버그 및 몇 가지 .plist 파일 항목이 변경된 것입니다 새 번들 ID를 반영하도록 업데이트되었습니다.

here 첨부 파일로 게시 된 제안 된 픽스는 포함 된 파일이 JSONKit을 참조한 CDVInvokedUrlCommand를 참조 했으므로 즉시 작동하지 않았습니다. 최신 CDVInvokedUrlCommand.h 및 CDVInvokedUrlCommand.m뿐만 아니라 JSONKit.h 및 JSONKit.m (모두 Cordova GitHub 레포에서 제공)을 다운로드해야합니다. 제안 된 수정 프로그램의 Phongap 1.4.1 버전의 README.txt 파일에있는 코드에도 오류가 있습니다. 그것은 말했다 :

- (void) webViewDidStartLoad:(UIWebView *)theWebView 
    { 
     static CDVLocalStorage* localStorage = nil; 
     if (localStorage == nil) { 
      localStorage = [[CDVLocalStorage alloc] initWithWebView:theWebView]; 
      [localStorage restore:nil withDict:nil]; 
     } 

     return [ super webViewDidStartLoad:theWebView ]; 
    } 

하지만 위의 방법을 몸을 추가 말했다한다 : 앱의 "AppDelegate.m"이 당신의 "webViewDidStartLoad"기능을 대체에서

6) 앞의 메소드 서명이 어디에도 존재하지 않으므로이 서명으로 이미 가지고있는 메소드와 [localStorage restore:nil withDict:nil]; 라인을 [localStorage restore:nil];으로 변경해야합니다.

물론 AppDelegate.m에 적절한 가져 오기를 추가해야했습니다.


최신 버전의 Phonegap으로 업그레이드하는 것이 가장 쉬운 방법입니다. 그러나 우리는 (비교적 갑자기) 고대 버전 1.4.1과 아직 새로운 버전의 Phonegap과 호환되지 않는 타사 플러그인을 사용하고 있습니다. 그래서이 수정은 우리에게 가장 적합했습니다.

관련 문제