2012-05-08 4 views
1

저는 고객의 회사에서 iPad 용 카탈로그 앱을 개발 중입니다. 그들은 1000 개 이상의 제품을 보유하고 있습니다. 각 제품은 둘 이상의 이미지를 가질 수 있습니다. 각 제품은 웹 서비스에서 앱에 표시할지 여부를 설정할 수 있습니다. 예를 들어 구식 제품의 데이터와 이미지는 앱 내부에 존재하지 않습니다. 내 고객이 웹 서비스와 데이터를 동기화하기로 결정했을 때. 모든 데이터가 새로 고침되고 모든 이미지가 다운로드됩니다. 오래된 데이터 또는 사용되지 않은 데이터는 모두 삭제해야합니다.iPad의 저장 공간에 1000 개 이상의 이미지 저장

그는 인터넷 연결 없이도이 앱이 오프라인으로 작동하기를 원했습니다.

웹 서비스에서 JSON 형식의 모든 데이터를 가져 와서 NSMutableDictionary 객체로 파싱하면 모든 제품 데이터를 저장하는 것이 좋습니다. 그들은 심지어 1000 개 이상의 제품 데이터를 포함 할 것입니다. 괜찮을 것입니다 (아마도).

그러나 이미지의 경우 장치 저장 장치 안에 보관해야하며 이미지를 참조 할 때 가장 좋은 방법이 무엇인지 모릅니다. 각 이미지의 크기는 10Kb 이하 여야합니다.

내 현재의 접근 방식은 (내가 생각할 수있는)

  • 에 가게 NSMutableDictionary 및 사용 NSArchiver의 방법, archiveRoodObject 내부의 모든 제품의 데이터 :
  • (또는 어쩌면 그냥 사용 [원자 NSMutableDictionary writeToFile]) TOFILE
  • 모든 이미지를 장치 저장소에 저장하십시오.
  • 어레이/딕셔너리 만들기에는 참조로 사용되는 모든 기존 이미지 이름과 경로가 포함되어 NSArchiver에 저장됩니다 (또는 [NSMutableDictionary writeToFile : atomically]도 사용 가능). 동기화 후이 참조 안에 있지 않은 이미지는 삭제됩니다.

이전 고객의 프로젝트에서 이전에했던 접근 방식이었습니다. 하지만 그 프로젝트의 앱에는 100 개 미만의 이미지가 포함되어 있습니다. 그리고 내가 잘못하고있는 것처럼 느껴집니다.

좋은 제안이 있으시면 알려 주시기 바랍니다. 어떤 제안이라도 환영합니다.

참고 : 이미지를 CoreData에 저장하는 방법에 대한 몇 가지 주제를 읽었습니다. 그러나, 나는 지금까지 그것을 경험하고 싶지 않다. 왜냐하면 나는 이전에 경험이 없기 때문이다. 그리고 현재의 프로젝트는 엄격한 스케줄을 가지고있다. 그래서, 그것이 정말로 필요하지 않다면, 나는 그것을 나중에 시도하고 싶습니다.

마지막으로 나는 CoreData를 사용하여 내 응용 프로그램을 마이그레이션 등의 조각사 말했다 이동하기로 결정했다. 그러나 writeToFile을 먼저 사용하여 모든 제품 정보를 저장하려고 시도 할 수 있습니다. Graver가 말했듯이 새로운 것을 시도하는 것은 나쁘지 않습니다. 결국 우리는 뭔가를 얻을 것입니다.

+1

현재 접근 방식이 좋습니다.핵심 데이터는 제품의 데이터를 저장하는 데 단지 지나치게 많이 사용됩니다 (단일 테이블 사용). – user523234

답변

5

유일한 변경 사항은 CoreData입니다. 제품 상세 정보와 이미지의 로컬 경로는 데이터베이스에 보관하지만 스토리지의 실제 사진 파일 즉, 앱의 Documents 디렉토리에있는 디렉토리. CoreData는 모든 데이터를 보관할 수없는 성능을 제공합니다. CoreData에 대한 경험이 없다면 문서 보관 및 보관과 같은 복잡한 솔루션에 대한 생각보다 파일을 읽고 구현하는 데 시간을 절약 할 수있을 것입니다. 그리고 다음 프로젝트에서 CoreData에 익숙해 질 것입니다. :) 2-in-1

+2

예, NSDocumentDirectory 대신 NSCachesDirectory를 사용하십시오. –

+0

흠, 문서 및 라이브러리 디렉토리가 보장 될뿐만 아니라 앱 업데이트 후 보존 되었습니까? – graver

+1

업데이트가 없어도 iOS에서 공간 크런치가 느껴질 때마다 NSCacheDirectory에서 데이터가 삭제됩니다. 따라서 캐시 디렉토리에 영구 데이터를 저장하는 것은 권장되지 않습니다. – UPT

관련 문제