2014-12-10 8 views
-1

오프라인과 온라인 모두에서 작동하는 iOS 앱을 개발 중입니다. 앱은 기본 및 프리미엄과 같은 구독 유형에 따라 앱의 기능이 연기되도록 설계되었습니다.
기본 사용자는 온라인 모드에서만 앱을 사용할 수 있지만 프리미엄 사용자는 온라인 및 오프라인 모드에서 앱을 사용할 수 있습니다.오프라인 (소스 코어 데이터) - 온라인 (서버 데이터) 모드로 코어 데이터를 사용하는 방법

응용 프로그램을 온라인 모드로 사용하면 웹 서비스가 호출되고 응답 데이터가 구문 분석되어 NSObject 클래스 (Business Object)의 객체에 저장됩니다. 이 NSObject는 각 뷰 컨트롤러에 데이터를 바인딩하는 데 사용됩니다. 이 기능은 온라인 모드에서 앱을 사용하는 기본 및 프리미엄 사용자 모두에게 동일합니다. 그러나 프리미엄 사용자를위한이 기능 외에도 오프라인 모드에서 앱을 작동시키기 위해 서버에서 가져온 데이터를 핵심 데이터에 저장합니다. 코어 데이터에 데이터를 저장하기 전에 NSObject 클래스의 객체를 NSManagedObject 클래스 (NSObject -> 변환 클래스 -> NSManagedObject)의 객체로 변환하는 데 사용되는 변환 클래스 (NSObject의 서브 클래스)를 사용하고 있습니다. NSManagedObject 클래스의 개체에서 NSObject 클래스의 각 개체 (NSManagedObject -> 변환 클래스 -> NSObject) 로의 변환을 수행하는 동안 오프라인 모드에서 성능 문제가 발생했습니다. NSObject를 제거하고 응용 프로그램 전체에서 NSManagedObject 만 사용할 수 있습니까?


우리 앱이 온라인 모드에있는 동안 핵심 데이터에 기본 사용자의 데이터를 저장할 해달라고,을 유의하시기 바랍니다.

+0

예, 엔터티는 해당 '컨텍스트'에서'save :'를 호출 할 때만 영구 저장소 (SQLite)에 저장됩니다. – user623396

답변

0

CoreData를 구현할 때 항상 NSManagedObjects를 모델로 사용하여 동일한 객체에 대해 서로 다른 두 클래스를 만드는 것이 바람직하지 않습니다. 속도가 느리고 많은 오류가 발생합니다.

기본 사용자가 온라인 모드에서만 작업 할 수 있으면 데이터베이스의 모든 데이터를 저장해야하지만 컨트롤러에서 규칙을 구현해야합니다.

0

코어 데이터는 필요하지만 영구 저장소는 사용하지 않으려면 메모리 내장 스토어를 사용하십시오. 똑같은 모델이지만 스토어는 SQLite 스토어를 사용합니다. 변경되는 유일한 방법은 상점을 만드는 방법입니다.