2010-04-26 8 views
3

CoreData를 사용하는 애플리케이션이 있으며 태그로 태그를 지정하고 필터링하는 가장 좋은 방법을 찾아 내려고합니다. 내 목적으로, 만약 내가 원시 SQLite 에서이 작업을 수행하는 경우에만 tags, item_tags 그리고 물론 내 items 테이블 세 테이블이 필요합니다. 그런 다음 필터링은 주어진 태그와 관련이있는 세 테이블 사이에 합치는 것만 큼 간단합니다 (items). 아주 간단합니다.iPhone에서 핵심 데이터를 사용하여 태그 지정 구현

하지만 CoreData에서 이것을 수행하고 NSFetchedResultsController을 활용하는 방법이 있습니까? NSPredicate은 조인을 통해 필터링 할 수있는 기능을 제공하지 않습니다. NSPredicate's은 어쨌든 전체 SQL이 아니므로 아마도 잘못된 트리를 짖고있을 것입니다. 내가 CoreData없이 SQLite를 사용하여 내 애플 리케이션을 다시 구현하지 않으려 고 노력하고있어 성능 CoreData 다른 분야에서 나를 즐기고있어. 네, CoreData가 생성하는 원시 SQLite를 고려해 보았습니다 (테스트 구현체를 작성했습니다). 그러나 이것이 미래의 증거는 아니므로 역시이를 피하고 싶습니다.

은 다른 사람이 모든 NSFetchedResultsController

답변

9

처음으로 UITableView에서 CoreData로 필터링/태그를 해결하기 위해 노력하고, 당신은 실제로 Item_Tags 개체가 필요하지 않습니다. 핵심 데이터는 중간 엔티티가 없어도 다 대다 관계를 모델링 할 수 있습니다. 대다수가 items 인 대다수가 tags 인 관계를 가질 수 있으며 코어 데이터가 모든 마법을 수행하여 막후에서 일어날 수 있습니다.

그래서 설명하는 작업을 수행하도록 가져 오기 요청을 설정하려면 다음과 같이하십시오. 필터링 할 태그를 나타내는 tag이 있다고 가정합니다. 이 같은 조건을 쓰기 : 이것은 당신에게 tags 관계의 자신의 세트에 tag가있는 경우에만 Item의를 반환하는 조건을 줄 것이다

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"%@ IN tags", tag]]; 

. 아주 쉽지, 응?

기억하십시오 : 핵심 데이터는 데이터베이스가 아닙니다. 이것은 객체 그래프 관리 시스템입니다. 사실 뒤에서 SQL을 사용한다는 사실은 사용하는 방식에 영향을주지 않습니다.

+0

와우, 그게 전부이며, 가져온 결과 컨트롤러로 성능이 좋습니까? 나에게 좋은 소리. 이것을 구현하는 방법을 살펴 보겠습니다. 그래, 코어 데이터가 데이터베이스가 아닌 것을 알고 있습니다. 나는 그것의 목적을 영속 객체 그래프 (persisted object graph)로 꽤 잘 활용하고있다. 그러나이 문제가 발생했을 때 이러한 NSPredicates와 같은 것들이 내가 SQL에 대해 아는 바를 알게 해 주었다. :) –

관련 문제