1

NSPredicate에서 가져온 속성을 사용하는 것에 대한 질문이 있습니다 ('내 질문'아래 참조). 가져온 속성을 가져 오는 술어가 아닙니다. 명확한 설명과이 문제에 직면 할 수있는 다른 것들에 대해서 나는 작은 샘플 프로젝트를 만들려고 노력했다.가져온 속성 - 조건부

샘플 프로젝트

내 응용 프로그램 때문에 아이폰 OS 데이터 보관 지침을 위반 거부했기 때문에 반입 속성, 온 사용할 필요가. QA1719에서 그들은 다음과 같이 작성합니다 :

애플 리케이션 데이터와 사용자 데이터가 같은 파일에 섞이지 않도록해야합니다.

ICloud 동기화가 더 쉬울 수도 있고 마이그레이션에 도움이 될 수도 있습니다.

이렇게하려면 어떻게해야합니까?

사전로드 된 sqlite 데이터베이스를 사용했습니다.이 데이터베이스는 처음 실행될 때 번들 경로에서 복사되어 사용자 편집 내용을 저장하는 데 사용됩니다. 미리로드 된 데이터와 사용자 데이터를 섞어서는 안되기 때문에 데이터를 분리하려고합니다.

주요 문제는 서로 다른 상점 (Cross-Store Relationships)간에 관계를 가질 수 없다는 것입니다.

나는 Fetched Property Project에 대한 샘플을 아직 찾지 못해서, 나는 여기에 자신을 만들려고 노력하고 있습니다.

샘플 들어있다 :

  1. 영구 저장소 Books.sqlite 및
  2. A의 저장 (플러스 아이콘과 샘플 당신 '프리로드'그들) 책의 사전로드 목록 책을 좋아하는 책으로 만드는 방법. 이것은 영구 저장소 UserData.sqlite에 저장됩니다.

엔티티는 다음과 같습니다

--------------    -------------- 
| Books |    | Favorite | 
--------------    -------------- 
- author      - favorite 
- title  --- 1 : 1 --- - books_title 

법인 '도서'PreloadedData위한 '즐겨 찾기'UserData를 포함해야합니다.

단지 예를 들어, 그것은 또한 사용자 정보 (술어 가능 참고) 할 수있다거나 책이 다른 사람에게 임대되어있는 경우 즐겨 찾기 - 태그 ... 내 xcdatamodeld에서

(엑스 코드 편집기) 두 개의 구성 (PreloadStore, UserStore)을 추가했습니다. 각 요소는 필요한 엔티티 만 포함합니다.

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 
... 
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"PreloadStore" URL:storeURL options:nil error:&error]) { 
... 
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"UserStore" URL:storeURLUserData options:nil error:&error]) { 

내가 샘플 프로젝트는 here을 다운로드 할 수 있습니다 술어

books_title == $FETCH_SOURCE.title 

책에서 가져온 속성 link_favorite을했다 :

그들은 (모든 다른 인 보일러에서이다)와 함께 사용됩니다. Predicate (즐겨 찾기 책으로 필터링)를 제외하고는 작동합니다.

내 질문에 내가 좋아하는 경우에만 그 책에 의해 책에서 가져 필터링하고 싶습니다

. 나는 (fetchedResultsController) MasterViewController.m

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"favorite_link.favorite == 1"]; 

를 사용했지만, 이것은 단지 충돌로 이어집니다.

나는 like here에 COUNT 또는 SUBQUERY를 사용해야한다고 생각하지만, 알아 내지 못했습니다.

미리 도움 주셔서 감사합니다.

는 --edit는 :

나는 간단한 NSArray를 가져 오기 (코어 데이터)를 만들어, 여기에 작동하고 다음

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY link_favorite.favorite == 1"]; 
result = [result filteredArrayUsingPredicate:predicate]; 

을하지만 어떻게 내가 NSFetchedResultsController에 대한 하위 쿼리에서 이것을 번역 할 (tried this blog article)? 잘못된입니다 : 내가 처음 실행에 번들 경로에서 복사 및 사용자의 편집 내용을 저장하는 데 사용되는 사전로드 된 SQLite 데이터베이스를 사용했다

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(contents, $x, $x.link_favorite.favorite == 1)[email protected] > 0"] 
+0

샘플 프로젝트 링크를 업데이트 할 수 있습니까? – joneswah

+0

어떻게 작동시키는 지 알아 냈습니까? 크로스 스토어 및 가져온 속성에서 비슷한 문제가 있습니다. http://stackoverflow.com/questions/16391255/using-a-nsfetchedresultscontroller-with-an-nsmanagedobject-and-fetched-propertie – Gujamin

답변

0

.

사전로드 된 데이터 자체는 배송에 문제가 없습니다. 번들 및 초기 앱로드시 JSON 파일을 제공하고 파싱 한 후 코어 데이터로 가져와야합니다. 그렇게하면 당신이하려는 일이 단순해질 것이고 애플에게는 불만이 없을 것입니다. 그렇게하면 나머지 질문이 무의미 해집니다. 이를 수행하는 데는 한 가지 이상의 방법이 있습니다.

또한 즐겨 찾기를 자신의 항목으로 설정하는 이유가 있습니까? 왜 'isFavorite'라는 책 엔티티에 bool을 만들 수 없습니까?

+1

답변 해 주셔서 감사합니다. ;; 나는 이전에 괜찮다고 생각한다. 이제는 더 이상 알 수 없습니다. "앱은 앱 데이터와 사용자 데이터를 같은 파일에 섞어서 사용하지 않아야합니다." ([QA1719] (http://developer.apple.com/library/ios/#qa/qa1719/_index.html). ; 물론 샘플은 내 앱이 아닙니다. 현재 어떤 종류의 즐겨 찾기를 사용하고 있습니다. 정수 필드 (관계와도 관계가있을 것입니다.) 다른 필드도 저장하고 있습니다. 그러나 icloud에 대해서도 별도의 작업을하고 싶습니다.) 나머지 샘플은 작동하지만 술어 만 누락되었습니다. –

0

하위 쿼리에는 여기에없는 관계가 필요합니다. 그래서 내 의견으로는 작동하지 않습니다. fetchedResultsController의 엔티티를 가져 와서 가져온 속성을 통해 관련 서적 객체에 필요한 데이터를 검색 할 수 있습니다. 시간을 절약하려면 사용자가 원하는 셀의 테이블 뷰에 표시 할 가장 관련있는 데이터를 저장하고 사용자가 셀을 선택하고 상세보기로 이동하는 경우에만 추가 데이터를 검색 할 수 있습니다.