2011-11-23 2 views
2

사용자의 첫 번째 로그인에서 내 서버에서 많은 데이터를 다운로드하여 iOS 앱의 로컬 데이터베이스에 저장해야하는 애플리케이션을 개발 중입니다.데이터베이스 초기 데이터를 iOS 앱에 다운로드하는 가장 좋은 방법은 무엇입니까?

제 서버에서 MySQL을 사용하고 있습니다. 그리고이 데이터를 로컬로 사용하거나 연결하지 않고 iOS 앱에 70MB를 다운로드해야합니다.

이 데이터를 다운로드하는 가장 좋은 방법은 무엇입니까? XML 압축? SQLite 파일로 내보내기,이 파일 압축 및 다운로드?

어떤 방법으로도 접근 할 수 있습니까?

답변

4

서버의 데이터베이스가 동적 인 경우. 좋은 접근법은 서버에서 데이터베이스 데이터에 액세스하기위한 API를 작성하는 것입니다. PHP를 통해 API를 빌드하고 앱이 JSON 또는 XML로 데이터 응답을 읽도록 할 수 있습니다.

데이터베이스가 정적이고 자주 업데이트되지 않는 또 다른 방법은 SQL 데이터베이스를 SQLite 데이터베이스로 IOS 응용 프로그램에 추가하고 SQLite 데이터베이스에서 응용 프로그램에 대해 로컬 SQL 쿼리를 실행하는 것입니다.

+0

데이터를 사용하여 다운로드를 압축, SQLite는로 내보낼 수 있습니다 사용자는 연결이 있거나없는 앱을 사용할 수 있습니다. x 시간마다 업데이트 (새로운 레코드 및 업데이트)에 대한 알림이 사용자에게 전송되어 새 데이터를 앱에 다운로드 할 수 있습니다. 그래서 json 또는 xml을 사용하는 서버에 대한 요청에 대해 확신하지 못합니다. – FreelanceAr

+0

그런 다음 SQLite를 사용하면됩니다. 사용자가 응용 프로그램을 시작할 때마다 최신 버전의 데이터베이스를 확인할 수 있습니다. 최신 응용 프로그램에서는 ios 응용 프로그램의 sqlite db 파일을 다운로드하고 덮어 쓰게됩니다. –

+0

예를 들어, MySQL 데이터베이스를 SQLite로 (예 : 하루에 한 번) 내보내고 압축하는 스크립트를 만들 수 있습니다. 그런 다음 사용자가 첫 번째 로그인을 통해이 zip을 다운로드하고 확장 한 다음 작업을 시작하십시오. – FreelanceAr

0

우리는 웹 서비스와 SOAP을 사용하여 서버간에 데이터를 전송합니다. SOAP 및 REST 웹 서비스를 조사해야합니다. 기본적으로 파싱하고 적절한 객체를 만드는 데 사용할 수있는 xml을 얻습니다.

이 작업이 수행하려는 작업에 다소 지나치지는 않지만 조사 할 가치가 있습니다.

또한 대부분의 모바일 플랫폼에서 지원되는 SQLite 데이터베이스에 데이터를 저장할 수 있습니다. 내가 거기에 업데이트 및 새 레코드 수 있지만 데이터가 로컬로해야합니다 의미)

+0

나는 이것을 생각하고 데이터를 테이블로 나누어 다운로드했다. 우선 테이블 A (10MB)를 다운로드 한 다음 테이블 B (12MB)를 다운로드합니다. 그러나 10Mb는 WS 호출에 너무 많은 데이터가 아닙니다. 다른 한편에서는 번들에 데이터를 넣을 수 없기 때문에 사용자가 처음 로그인 할 때 마지막 레코드가 포함 된 데이터베이스를 다운로드 할 수 있어야합니다. 데이터베이스를 번들로 묶는다면, 매 x 시간마다 앱 스토어에 앱을 업로드해야 앱이 마지막 데이터를 포함하게됩니다. – FreelanceAr

+0

SOAP은 너무 단순한 작업 때문에 너무 많아서 JSON을 대신 추천합니다. – Till

+0

데이터와 데이터베이스는 서로 다른 두 가지 점이 있습니다. 물론 데이터베이스 테이블을 묶어서 (물론 비어 있음) 나중에 다운로드 호출로 데이터를 채울 수 있습니다. 바이너리를 다시 제출해야하는 방식으로 필드를 수정하려는 경우에만 문제가 발생합니다. 또한 WS 또는 10MB 다른 방식으로 데이터를 전송할 때도 여전히 많은 양의 데이터가 전송됩니다. 언급 된 JSON은 XML보다 훨씬 더 작아서 좋은 선택입니다. – PaulG

0

예를 반 dinamyc 될 것 AFNetworking.

NSString *[email protected]"http://yourFileURL.zip"; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:yourFileURL]]; 
AFURLConnectionOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

NSString *cacheDir = [NSSearchPathForDirectoriesInDomains 
          (NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [cacheDir stringByAppendingPathComponent: 
         @"youFile.zip"]; 

operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO]; 

[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 
    //show here your downloading progress if needed 
}]; 

[operation setCompletionBlock:^{ 
    NSLog(@"File successfully downloaded"); 
}]; 

[operation start]; 
관련 문제