2011-08-29 2 views
1

불변의 데이터베이스에서 작동 할 핵심 데이터가있는 프로젝트를 만들었습니다. 그리고이 프로젝트에 코드를 작성하지 않고 프로그래밍 방식으로이 데이터베이스를 채 웁니다. 따라서 핵심 데이터가있는 두 번째 프로젝트를 만들고 복사하지 않고 첫 번째 프로젝트의 기존 xcdatamodel을 추가합니다 (참조 만). 거기에 내 데이터베이스를 채우고, mozilla 플러그인으로 열면 성공적으로 채워집니다. 그럼, 내 * .sqlite 파일을 복사하고 첫 번째 프로젝트에서 수동으로 이전 파일로 바꿉니다. 이로 인해 "상점을 여는 데 사용 된 모델이 상점을 만드는 데 사용 된 모델과 호환되지 않습니다"라는 오류가 발생합니다. 하지만 두 파일 모두 동일한 xcdatamodelid를 사용합니다. 어디에서 내 오류?두 개의 응용 프로그램에서 하나의 xcdatamodelId 사용

영어로 죄송합니다. 정말 도움이 필요합니다.

P. 첫 번째 프로젝트에서 sqlite 파일을 열고 FileMerge에서 두 번째 (주석으로 채워진 코드로 주석 처리 된 코드)를 열면 이미 비어 있습니다. 조언이나 도움에 감사드립니다.

답변

1

Karoly S가 질문에 친절하게 답변합니다. 나는 자주 동기화 상황을 막을 수있는 힌트를 가지고있다. 하나의 모델 파일을 공유하려는 두 개의 Xcode 프로젝트 대신 두 개의 대상을 가진 하나의 Xcode 프로젝트를 만듭니다. 각 대상은 동일한 모델 파일, 해당 모델에서 파생 된 클래스 정의 및 가능한 다른 코드를 사용합니다. 두 번째 목표는 데이터베이스를 생성하는 Mac OS 명령 줄 프로그램입니다. 첫 번째 목표는 계속해서 해당 데이터베이스를 읽는 iOS 앱입니다. Mac OS 대상은 프로젝트 하위 디렉토리의 데이터베이스 파일을 덮어 써서 최신 상태로 유지합니다. 모델을 변경하면 Xcode는 두 대상을 모두 업데이트하는 것을 알고 있습니다.

+0

예 두 가지 목표는 훌륭한 해결책이 될 것입니다. 감사합니다! –

+0

감사합니다. –

1

어떤 식 으로든 모델 정의를 변경 했습니까? 보고있는 오류는 모델을 만들 때와 모델을 참조 할 때 사이에 차이가 있기 때문에 발생합니다. 시뮬레이터에서 실행 중입니까? 앱이 오래된 것일 수 있으므로 두 앱 모두 삭제하여 관련 데이터를 삭제하십시오. 이후에는 핵심 데이터 데이터베이스를 업데이트하기 때문에 두 프로젝트를 다시 빌드하면됩니다.

편집 : 조금 더 명확히하기 위해 핵심 데이터 모델이 동기화되지 않았습니다. 이는 일반적으로 앱을 만들고 실행하고 데이터베이스를 생성 한 다음 개체 모델을 다시 정의함으로써 발생합니다. 속성 또는 엔티티의 추가로 인해 발생할 수있는 다양한 방법. 따라서 데이터베이스를로드하려고 할 때 앱과 핵심 데이터가 찾고있는 필드가 있지만 데이터베이스를 만들 때 존재하지 않았기 때문에 존재하지 않는 필드가 있습니다. 이게 도움이 되길 바란다.

+0

전체 대답을 가져 주셔서 감사합니다. 단계별로 : 내 기본 프로젝트에서 빈 데이터베이스를 만듭니다. 그런 다음 InitializeDataBase 프로젝트 데이터베이스 (데이터 만 생성) 만 만듭니다. 그 후이 * .sqlite 파일을 폴더를 main.sqlite (데이터베이스 이름은 동일합니다)로 바꾸고 이전 파일을 new로 바꿉니다. xcdatamodel에서 아무 것도 변경하지 않지만 문제는 남아 있습니다. 재미있는 사실 - FilesMerge에서 두 * .sqlite 파일을 비교할 때 공용품, 주 proj에서 첫번째 것, 비어 있지 않다 - 그것은 비어있는 두번째 proj에서 sqlite 파일과 대비하여 테이블의 desription가있다. 관심을 가져 주셔서 감사합니다. –

+0

흠 ... 그래서 앱에서 참조하는 실제 생성 된 데이터베이스를 대체합니까? 당신이 우리에게 정확한 오류 메시지를 줄 수있는 기회가 있습니까? –

관련 문제