2010-12-18 7 views
0

다양한 애플 리케이션에 사용하려는 몇 가지 항목과 관계가있는 일반 모델 프레임 워크가 있습니다. 각 앱마다 해당 엔티티 중 하나에 특정 속성 세트를 정의하고 싶습니다. 각 애플 리케이션이 기본 엔티티의 자식 인 엔티티를 정의 할 수 있다고 생각했지만 아이가 다른 모델 파일에있는 경우 엔 그렇게 할 수없는 것처럼 보입니다. 그리고 모든 자식 요소를 동일한 모델 파일에 넣으면 각 응용 프로그램의 엔티티는 모든 응용 프로그램의 특성으로 끝납니다.CoreData : 다른 프로젝트의 공통 기본 엔터티와 다른 하위 클래스

이 시점에서의 나의 유일한 해결책은 기본 엔티티 만 갖고 해당 속성을 사전으로 사용하는 것입니다. 그런 다음 각 응용 프로그램은 사전에 적절한 값을 조회하는 속성을 정의하는 NSManagedObject의 하위 클래스를 작성할 수 있습니다. 나는 거기에 perf 문제가있을 수 있다고 생각하지만.

다른 아이디어 나 사전 접근 방식에 대해 생각해보십시오. 감사!

답변

1

내가 게시했을 때 깨닫지 못한 한 가지는 프로그래밍 방식으로 모델을 수정할 수 있다는 것입니다. 그래서 각 하위 프로젝트에서 프로젝트 고유의 속성으로 하위 속성을 추가하기 시작했습니다. 이것은 잠시 동안 문제를 해결했습니다.

그러나 모델 마이그레이션이 문제였습니다. 기본 프로젝트의 모델 파일에서 뭔가를 변경하면 자동 마이그레이션 또는 매핑 파일을 사용하여 하위 프로젝트가 만든 데이터 저장소를 마이그레이션 할 수 있다고 생각했습니다. 그러나 하위 프로젝트가 모델을 수정했기 때문에 이전 모델을로드하고 수정 한 다음 새 모델을로드하고 수정 한 다음이 두 모델간에 마이그레이션을 수행해야했습니다.

모든 것이 고통 스러울 것이므로 DB 스키마를 일반적인 객체, 속성 및 값 테이블을 사용하여 좀 더 유연하게 변경했습니다. 이제 각 서브 프로젝트는 새로운 종류의 객체를 정의하고자하는 모든 데이터를 던져 넣을 수 있습니다.

0

나는 두 가지 CD 엔티티에 공통된 속성과 기능을 정의하는 기본 클래스를 가지고 있습니다. 하지만 수퍼 클래스에서 값에 액세스하려고하면 오류가 발생합니다.

여기 내가 해결하려고 한 것입니다.

데이터 모델을 만들고 평소에 클래스를 생성하십시오. NSManagedObject의 하위 클래스 인 수퍼 클래스를 직접 작성하십시오. 선언 된 변수를 의미하지 않는 생성 된 클래스와 동일한 구조를 제공하십시오. 숫자에 대해서는 @dynamic, NSNumber *를 사용하십시오.

그건 나를위한 트릭입니다.

관련 문제