2014-05-18 2 views
1

최근에 핵심 데이터를 읽고 많이 읽었으며 데이터 저장소를 구현하는 방식을 좋아합니다.코어 데이터 엔티티를 참조하는 가장 좋은 방법은 무엇입니까?

그러나 아직 내 앱에서 해결할 수없는 것이 하나 있습니다.

내 데이터 모델에는 사용자가 텍스트 필드에 삽입 한 텍스트 묶음을 나타내는 엔티티가 있습니다. 이 텍스트 척도를 참조하여 다른 텍스트 필드에 포함시킬 가능성을 사용자에게 제공 할 수 있기를 바랍니다. 내가 직접 데이터베이스로 작업 한 경우

, 나는 같은 것을 할 것입니다 :

  1. 사용자는 데이터베이스에있는 텍스트의 체크를 추가합니다. 행 색인 17이 발생합니다.
  2. 사용자는 데이터베이스의 텍스트 청크를 참조 할 수있는 기본 편집기로 돌아가서 {chunk.17}과 같은 패턴을 삽입합니다. 여기서 17은 데이터베이스의 행 인덱스입니다.
  3. 사용자가 "구문 분석"버튼을 클릭하면 앱이이 행의 데이터베이스를 쿼리하고 여기에 저장된 텍스트 청크 문자열 {chunk.17}을 바꿉니다.

코어 데이터에는 자동 증가 인덱스와 같은 것이 없으므로 많은 작업없이 비슷한 동작을 만드는 방법을 모르겠습니다. 모든 아이디어를 높이 평가합니다!

+0

를 응답 귀하의 코멘트 ... "코어 데이터는 자동 증가 인덱스 같은 것은이 없습니다"로. NSSQLiteStoreType을 사용하고 있고 NSManagedDocument를 사용하지 않고 데이터를 지속한다면, (터미널을 통해) SQLite db를 열고 데이터베이스를 검사 할 수 있습니다. 코어 데이터가 각 테이블을 생성 할 때 자동 증분 프라이 머리 키인'Z_PK INTEGER PRIMARY KEY'를 생성한다는 것을 알 수 있습니다. 코드에 직접 액세스 할 수는 없지만 존재하지는 않습니다. 귀하의 질문과 관련이 없으므로이 정보를 배경으로 제공하기를 원합니다. – andrewbuilder

+0

귀하의 질문에 대한 답변으로, 귀하의 코드에서 액세스하고자하는 데이터 모델의 각 엔티티에 대한 NSManagedObject 하위 클래스를 준비하고 있습니까? – andrewbuilder

+0

@andrewbuilder 예. Xcode에서 생성 한 클래스를 그대로 사용하고 카테고리를 사용하여 빌드합니다. –

답변

1

고유 한 값을 가진 엔티티에 속성 (예 : "id")을 추가해야하는 것처럼 들립니다 (개체에 고유 한 ID/값을 생성하는 방법에 대한 Stackoverflow에 대한 토론이 많이 있습니다.). 당신이 그것을 가졌을 때 당신은 자 NSPredicate를 사용하여이 값을 참조 할 수 있습니다 : 옆으로 ... 참고로

NSFetchRequest *req = [[NSFetchRequest alloc] initWithEntityName:@"Demo"]; 
// A predicate is used as a limited substitute for a 'where' clause. In this case, we're specifying that 
// the result set should only contain entities whose id is 'chunk.17'. 
[req setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE[c] %@", @"id", @"chunk.17"]]; 

NSError *error; 
NSArray *results = [self.managedObjectContext executeFetchRequest:req error:&error]; 
+0

왜 사용자가 '신원'을 지정할 수 있도록 허용하지 않는가? 특히 '구문 분석'을 시작하기 전에 나중에 다시 입력 할 경우 ... 또한 와일드 카드와 사용자를 허용하므로 'LIKE [c] 입력 된 내용으로 인해 문제가 발생할 수 있습니다 ... – Wain

+0

동의 - 사용자가 신원을 설정하게하려면 LIKE [c]를주의해서 사용해야합니다. 위의 제안은 신원이 프로그래밍 방식으로 설정된다는 전제에 기반했습니다. –

관련 문제