2013-06-26 4 views
3

입니다. 제 iPhone 앱에 약간의 성능 문제가 있다고 생각합니다.데이터를로드하고 저장하고 다시로드하는 가장 좋은 방법은

인터넷에서 데이터를로드하는 방법을 보여주고 전화 상에 저장하고 다시로드하여 테이블보기로 인쇄하십시오. 나는 앱에 여러 개의 모듈을 가지고 있으므로, 내가 사용하는 일반적인 방법을 설명하고 아마 당신 중 한 명이 아이디어를 얻었다면 그것을 확인하기를 바랍니다.

데이터 양은 10-20 개의 데이터 필드 (정수/텍스트)가있는 약 250 개의 데이터 세트입니다.

1 단계 : URL 요청하여 JSON 데이터 문자열을 얻기 일부 (예를 들어 CITY_ID 및 LAST_UPDATE_TIME에 대한) 값을 제한하여 내가 URL-요청에 의해 MySQL의 데이터베이스에 요청을 시작합니다

에 결과를 제한하십시오.

2 단계 : iPhone에서 SQLite3 데이터베이스에 JSON 객체 저장하기.

오프라인 모드에서도 데이터를 사용하기 때문에이 작업을 수행합니다. 총 시간의 3/4을 차지하기 때문에이 부분은 중 중 하나 여야합니다. 개체를 실행하고 이전에이 개체를 한 번 저장했는지 확인합니다. (여기서는 import_id를 사용하여 MySQL-Database-Objects를 식별합니다.) 찾았 으면이 데이터 세트를 업데이트하고 그렇지 않으면 삽입 할 것입니다.

3 단계 : SQLite는의 데이터를 다시로드하고있는 NSMutableArray

이 배열에 넣어이있는 TableView 의해 사용될 것이다.

참고 : 데이터는 주 스레드에서로드됩니다. 다른 스레드는 일부 엄지 손가락을 게으른로드하거나 회전하는 바퀴를 표시하는 데 사용됩니다.

절차에 큰 실수가 있습니까? 다른 스레드에서 데이터를로드해야하지만이 시점에서 뷰에 무엇을 표시해야합니까?

가장 좋은 방법은 무엇입니까?

+0

당신의 생각은 괜찮아 보입니다. 그러나,로드 및 백그라운드에서 DB를 채우고 어쩌면 사용자에게 활동 표시기를 표시합니다. – Jeremy

+0

기본적으로 괜찮습니다. 참조 할 때 DB의 개별 요소 만로드하는 "게으른"배열 체계를 사용하는 방법을 알아내는 것이 현명합니다 (TableView가 행을 관리하는 방법과 다소 비슷 함). 이를 처리 할 수있는 몇 가지 방법이 있습니다. (시작 중에 전체 배열을로드하면 "나쁜 사용자 환경"이 발생하고 앱이 종료되는 데 충분한 지연이 발생할 수 있음을 유의하십시오.) –

+0

@ 제레미 사용자를 표시하기 위해 데이터를로드하는 "스피닝 휠"을 구현했습니다 –

답변

2
  • 삽입 현재의 데이터를 포함 앱 번들로 JSON 파일 당신의 json 구문 분석에서. 이 경우에 사용하기 위해 처음으로 오프라인으로 사용됩니다.
  • 기기가 온라인 상태 일 때마다 json 파일을 업데이트하지만 해석 버전이 다른 경우에만 업데이트합니다.
  • 기기가 오프라인 일 때 언제든지 json 파일을 사용하십시오.
  • 번들의 json 파일이 항상 최신 버전이 될 것이므로 테이블 데이터를로드하십시오.

희망 사항은 도움이 될 것입니다.

+0

나는이 방법을 실제 프로젝트에서 사용할 것이라고 생각한다. 감사! (그리고 다른 아이디어는 앞으로의 프로젝트에서 기억할 것입니다. 다른 모든 사람들에게도 감사드립니다!) –

4

는 여기에 몇 가지 아이디어가 있습니다 :

  1. 사용 AFNetworking은 자신을위한 인생을 더 쉽게 할 수 있습니다. 웹 서비스에서 JSON 반환 값을 비동기식으로 쉽게 가져옵니다.
  2. SQLite를 직접 사용하는 대신 Core Data을 직접 사용하십시오. 응용 프로그램의 모든 진실성을 위해 다른 어떤 것보다 이것을 사용하는 것이 훨씬 쉽습니다.
  3. Core Data에서 결과를 수동으로 수행하는 대신 (2 단계 참조) NSFetchedResultsController을 사용하여 핵심 데이터에서 직접 테이블 뷰를로드 할 수 있습니다. 이 등, 데이터의 변화를 처리, 변경, 효율적인 메모리 관리에 대한 응답으로, 당신을 위해 물건을 많이 돌봐
+0

좋은 아이디어를 주셔서 감사합니다. 앞으로 프로젝트에서 사용 하겠지만, SQLite 나 Core Data 같은 기본적인 것들을 바꾸지 않고 문제를 해결할 수 있기를 바랍니다. AFNetworking도 멋지지만 Step1 (JSON 데이터로드)에는 많은 시간이 필요하지 않습니다. 나는 백그라운드 프로세스에 데이터로드 및 저장 (1 단계 + 2 단계)의 전체 과정을 거쳤다 고 생각합니다. 이게 성능 문제를 해결하기를 바랍니다. –

관련 문제