2009-06-10 4 views
7

핵심 데이터를 사용하여 모델을 유지하는 iPhone 3.0 응용 프로그램을 작성하고 있습니다. 응용 프로그램을 기본 데이터 세트와 함께 설치하고 싶습니다. iPhone < 3.0을 개발할 때 SQL 스크립트를 사용하여 빌드를 실행하기 전에 데이터베이스를 초기화 한 다음 준비된 .sqlite 파일을 응용 프로그램 자원으로 배포했습니다. 핵심 데이터를 통한 최선의 접근 방식은 무엇입니까?코어 데이터 기반 iPhone 응용 프로그램의 기본 데이터 집합

결론 : 결국 일반 XML 처리기를 작성했습니다. 요소 이름은 Objective-C 클래스 이름 및 특성 이름에 맵핑됩니다. 요소 내의 PCDATA 값은 요소가 명명 한 속성에서 선언 된 유형으로 변환되었습니다. 자식 요소 나 프로퍼티 요소는 객체 인스턴스로 해석되었으므로 XML 문서를 구문 분석하면 객체 그래프가 작성됩니다. 내가 먼저 목표 - C 런타임과 그립에 도착했다 :-)

예 대상 클래스 생각 : 마음에

<data> 
    <Sprocket id="sprocket-1"> 
     <name>Sprocket1</name> 
     <wheels>4</wheels> 
    </Sprocket> 
    <Widget id="widget-1"> 
     <name>MyWidget</name> 
     <sprockets> 
      <Sprocket ref-id="sprocket-1"/> 
      <Sprocket id="sprocket-2"> 
       <name>Sprocket2</name> 
       <canFly/> 
      </Sprocket> 
      <Sprocket id="sprocket-3"> 
       <name>Sprocket3</name> 
      </Sprocket> 
     </sprockets> 
    </Widget> 
</data> 
+3

나는 plists에서 실행되는 첫 번째 응용 프로그램에서 coredata 데이터베이스를 채워 왔으며 매우 긴 첫 번째 실행로드 시간을 초래했습니다. 나는 사람들이 "응용 프로그램 번들에서 생성 한 미리 채워진 .sqlite 데이터베이스를 사용하라"는 말을 계속하고 있습니다. CoreData 책 예제에서는 .sqlite 파일을 찾은 후에이를 사용하는 방법을 보여 주지만 처음에는 어디에 있습니까? 내가 대답을 찾았 : http://ablogontech.wordpress.com/2009/07/13/using-a-pre-populated-sqlite-database-with-core-data-on-iphone-os-3-0/ – Prairiedogg

답변

6

두 가지 옵션 스프링 :

@interface Widget : NSObject { 
@private 
    NSString* name; 
    NSSet* sprockets; 
} 
@property (nonatomic, retain) NSString* name; 
@property (nonatomic, retain) NSSet* sprockets; 
- (void)addSprocketsObject:(Sprocket*)value;  
@end 

@interface Sprocket : NSObject { 
@private 
    NSString* name; 
    NSNumber* canFly; 
    NSNumber* wheels; 
} 
@property (nonatomic, retain) NSString* name; 
@property (nonatomic, retain) NSNumber* canFly; 
@property (nonatomic, retain) NSNumber* wheels; 
@end 

예 기본 데이터

  1. 합리적인 데이터 형식 (XML, JSON 등)의 가져 오기 프로그램을 작성하고 첫 번째로 핵심 데이터 컨텍스트로 가져옵니다. 실행 한 다음 컨텍스트를 지속적 저장소에 저장하십시오.
  2. 앱에 영구 저장소가 하나만 필요한 경우 사전에 채우고 영구 저장소에 앱의 리소스를 배포 할 수 있습니다. 동일한 기본 데이터로 미리 채워진 여러 개의 영구 저장소가 필요하면 옵션 1이 더 쉬울 수 있지만 NSPersistenStoreCoordinator의 migratePersistentStore : toURL : options : withType : error : (또는 iPhone Core Data - - 여전히 NDA하에 있음) 새로운 매장을 만들 때마다 매장을 미리 만들어야합니다.

내 경험에 의하면 옵션 1을 구현하는 코드는 영구 저장소를 미리 채우는 데 필요한 코드와 거의 같기 때문에 실제로는 두 가지 관점 만있는 유일한 옵션이 있습니다.

4

Plist를 사용하여 처음 데이터를 저장하고 처음 실행시 영구 저장소를 채울 수 있습니다. 이 방법은 사용자 정의 XML 파서를 작성하는 것보다 쉽습니다.

관련 문제