2013-06-16 3 views
0

모든 코어 데이터 모델을 사용하는 일련의 관련 프로젝트가 있습니다. 데이터를 입력하기위한 하나의 OS X 앱. 서버로 작동하는 다른 OS X 앱으로 내보낼 것이며, 클라이언트로 작동 할 iOS 앱입니다. 각 클라이언트는 자체 로컬 저장소를 유지 관리하고 서버의 변경 사항은 로컬 네트워크의 TCP를 통해 MOCDidSave의 클라이언트로 전송됩니다.여러 프로젝트에서 단일 코어 데이터 모델 사용

모든 프로젝트/대상/응용 프로그램에서 단일 모델과 발전기에서 생성 된 NSManagedObject 하위 클래스의 단일 세트를 공유하고 싶습니다.

저는 작업 공간을 사용하고 여러 대상이있는 단일 프로젝트를 사용하는 방법을 살펴 보았습니다. Marcus Zarra가 Core Data book의 두 번째 에디션에서 개발 한 iOS 앱의 데스크톱 버전을 추가하는 데 사용 된 솔루션을 살펴 보았습니다. 이 작업을 수행하는 다른 방법도있을 것이라고 확신하지만 정적 라이브러리 또는 프레임 워크를 만드는 데 익숙하지 않으며이 문제에 대한 올바른 접근 방법인지 확신 할 수 없습니다.

가장 좋은 방법에 대한 제안 사항은 무엇입니까? 아니면 상충 관계가 될지에 대한 생각이 적어도 있습니까?

감사합니다.

브래드

답변

0

이것은 어렵지 않습니다.

기본적으로 모든 CoreData 관련 클래스와 모델은 CoreData 프로젝트에 추가 할 수있는 분리 된 폴더 시스템에 보관하십시오.

저는 과거에 하나의 독립형 데이터 스택 객체 레이어, 즉 영구 저장소 코디네이터, 영구 저장소 및 iOS 또는 OS X에서 인스턴스화 할 수있는 관리 객체 컨텍스트를 사용하려고 시도했지만 끈적 거리는 경우가있었습니다 일단 NSPersistentDocument를 사용하기 시작하면 결국 스택을 빌드하고 주어진 플랫폼에서 가장 효율적인 방법으로 각 플랫폼에 대한 공통 모델 및 MOGenerated 클래스를 가리키게됩니다.


편집

영업이는 B2B 응용 프로그램이 있음을 언급하고 그들이 그렇게 컨테이너 개체가 될 수는 OS X 측에서 일을 처리하기 위해 'NSDocument'/ 'NSPersistentDocument'를 사용하는 습관이 좋은 선택이야. 그 임무는 CoreData 스택을 관리하고 인스턴스화하는 것입니다. OS X 및 iOS에서 모두 컴파일되도록 작성됩니다. 따라서 데이터 레이어를 실행하려면 객체를 인스턴스화하고 managedObjectContext를 요청하면됩니다.

몇 가지 잠재적 인 내부 설정 방법에 대한 this blog by Florien Kugler 살펴


장점

앱을는 CoreData

와 함께 제공되는 공통 데이터 층과 모든 무료로 물건을 사용 되세요 단점

wrappered 파일을 사용하지 않는 한 MAS를 사용하지 않을 계획이 아니라면 Sandboxing은 OS X에 많은 고통을 줄 것입니다.

NSPersistentDocument는 포장지없이 래퍼 파일을 지원하지 않습니다.여러 사람들이 어댑터를 만들었습니다. GitHub를 확인하십시오. 그러나 어쩌면 당신은 그 길을 내려갈 계획이 아닙니다.

버전 관리. 데이터 모델을 변경하면 모든 클라이언트에서 필수 업그레이드가 이루어 지므로 배포하기 전에 모델이 올바른지 확인하십시오. 또한 Managed Object Model의 변경 작업은 매우 쉽지만 고객에게 배포 할 때 손가락 엇갈림이 발생합니다. 향후 확장을 위해 추가로 사용되지 않는 필드를 추가하십시오.

기본적으로 CoreData를 사용 하시겠습니까? 전에 말했듯이 말했지만, CoreData는 관계형 데이터베이스가 아니므로 fopen()의 멋진 버전입니다.

가능한 방법은 CoreData를 응용 프로그램의 shim 작업 레이어로 사용하지만 디스크에 간단한 JSON 레이어로 저장하는 것입니다. 따라서 향후 모델을 급하게 변경해야하는 경우 모든 고객 데이터.

요약하면. CoreData가 앱과 장기 전망에 적합한 지에 대해 오랫동안 생각해보십시오. 지금은 괜찮을 지 몰라도 2 년 뒤면 지옥에서 자신을 발견 할 수 있습니다.

+0

길고 자세한 답변을 주셔서 감사합니다. 그것은 MAS를 거치지 않을 것이고 iOS 용 B2B 응용 프로그램이 될 것입니다. (기본적으로 나 자신에게 그것을 판매 할 것이고 각각의 설치를 직접 할 것입니다. 그래서 각 배치마다 많은 접촉을 할 것입니다). 나는 NSPersistentDocument도 사용하지 않을 것이다. – dbfreq

+0

이상적으로는 "Workspace"에 대한 단일 폴더와 각 프로젝트에 대한 해당 폴더 내의 개별 폴더 + 데이터 모델 및 MO 하위 클래스에 대한 다른 폴더가 있어야합니다. 하지만 일단 데이터 모델이 각 프로젝트의 메인 번들 밖에 있으면, 변경 사항이 반영되도록 각 번들에 포함시키는 것이 가장 좋습니다. – dbfreq

+0

그냥 포함 시키십시오. 빌드 체인 (build-chain)은 모델의 위치를 ​​알아야하고 완성 된 제품으로 컴파일하는 곳을 신경 쓰지 않습니다. TBH 이것은 프레임 워크가 빌드의 종속 타겟이 될 수 있기 때문에 작업을 더 쉽게 만들 수있는 곳입니다. –

관련 문제