2011-08-12 2 views
2

애플 리케이션 데이터베이스 백업을 어떻게합니까?어떻게 - 어디에서 아이폰에 복원으로 애플 리케이션 데이터베이스를 백업 할 수

SD 카드에 앱 데이터베이스의 백업을 만들 수 있기 때문에 앱 데이터베이스의 SD 카드 백업이있는 다른 휴대 전화에서는 문제가되지 않습니다. 백업을 우편으로 이메일로 보낼 수도 있습니다. 전자 메일로 zip을 SD 카드에 저장할 수 있기 때문에 복원도 문제가되지 않습니다. 여전히 SD 카드에있는 파일을 사용합니다.

iPhone이 다른 이야기 인 것 같습니다. 데이터베이스의 사용자 부분 사본을 만들어 앱이있는 동일한 문서 폴더에 저장할 수 있습니다. 전화가 끊어 질 경우를 대비하여 해당 파일의 우편 번호를 이메일로 보낼 수도 있습니다.

하지만 이메일 첨부 파일의 다운로드를 앱 문서 폴더에 저장하는 방법은 무엇입니까? 그래서 사용자가 자신의 DB에 자신의 이메일을 업로드 한 다음 복원을 원한다면 어떻게할까요?

앱에서 DB 백업을하려면 어떻게해야합니까?

답변

1

당신이 이메일에서 문서를 저장하려면 당신이 할 수있는 다음 :

첫째, 새로운 키에 추가하여 백업 파일의 특정 확장자를 처리하기 위해 등록하는 당신의 Info.plist 파일을 수정 CFBundleDocumentTypes라고합니다.

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeName</key> 
     <string>MyApplication</string> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.myapplication.myapplicationsuffix.fileextension</string> 
     </array> 
    </dict> 
</array> 

다음으로 설정해야 할 것은 애플리케이션의 번들 URL 유형입니다.

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLName</key> 
     <string>com.myapplication.myapplicationsuffix.myoperationkey</string> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>packageforlaunch</string> 
     </array> 
    </dict> 
</array> 

사용자가 파일을 실행 (이메일에 도청) 그런 식으로, 당신의 응용 프로그램을 실행하고 여기에 파일 시스템 URI를 제공 할 것입니다. 응용 프로그램 대리자에서 - (BOOL) 응용 프로그램 : (UIApplication *) 응용 프로그램 handleOpenURL : (NSURL *) url 메서드를 구현할 수 있습니다.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if(url != nil && [url isFileURL]) 
    { 
     NSData *d = [NSData dataWithContentsOfURL:url]; 
     [[NSFileManager defaultManager] createFileAtPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:[url lastPathComponent]] contents:d attributes:nil]; 
} 

그러면 파일이 만들어지고 응용 프로그램에 저장할 수 있습니다. 여기서 핵심은 데이터베이스를 애플리케이션 번들에 저장하지 않고 애플리케이션의 사용자 폴더에 저장하는 것입니다. 그렇게하면 응용 프로그램 시작에서 적절한 잠금 장치가있는 한이를 쉽게 바꿀 수 있습니다. CoreData를 사용하면 스키마를 변경하지 않았거나 데이터베이스 버전에 맞는 올바른 .xcdatamodeld 파일을로드했는지 확인해야합니다. 그렇지 않으면 열리지 않는 데이터베이스로 끝날 수 있습니다.

내가 한 것은 CoreData 용 SQLite 데이터 저장소를 사용하거나 SQLite를 단독으로 사용하는 것입니다. 파일을 잠깐 잠그고 데이터베이스 파일의 복사본을 만들고 PUT/POST를 통해 API를 통해 서버에 업로드합니다. 그런 다음 서버는 파일을 CouchDB에 타임 스탬프와 함께 저장합니다. 이것은 가난한 사람의 버전 시스템이되는 효과가 있습니다. 데이터베이스에 사용자의 ID 또는 사용자의 UDID가 태그로 지정되었거나 타임 스탬프가있는 태그가 있기 때문에 항상 롤백 할 수 있습니다.

더 간단한 방법은 데이터베이스의 Apple의 새 문서 저장소와 백업을 나타내는 문서 ID에 대한 포인터가있는 키/값 저장소를 함께 사용하는 것입니다.

유감스럽게도 저는 쉬운 메커니즘이 있다고 생각하지 않습니다. 설명하는 이메일 메커니즘은 아마도 가장 간단하지만 CoreData를 사용하면 복잡해집니다. 원시 SQLite3 및 FMDB 라이브러리를 사용하는 경우 작업이 훨씬 수월해집니다.

+0

모든 세부 사항에 대해 정말 고마워요! 이 일에 정말로 감사드립니다! 현재 앱에는 앱이 설치 될 때 앱 문서 폴더에 압축을 해제 한 번들의 zip 파일이 있습니다.그것은 앱이 사용할 DB가됩니다. 내가 다른 곳에 넣어야 할까? 그것은 내게 아무 문제없이 docs 폴더에 다른 파일을 쓰게 보일 듯하다. 또한 같은 docs 폴더에 데이터베이스 백업을 만들었습니다. 나는 다른 곳에서도 그렇게해야 하는가? –

+0

또한 info.plist에서 ...이 부분은 XCode 또는 OS입니까? 내 응용 프로그램 com.myapplication.myapplicationsuffix.fileextension 변경 가정합니다? 내가 바꿀 필요가있는 것이 있습니까? –

+0

info.plist 파일은 일반적으로 만들어야하는 파일이며 iOS가 앱과 상호 작용하는 방식에 대한 메타 데이터를 지정합니다. –

관련 문제