2009-09-12 5 views
0

과의 관계를 설정의이 CategoryEntityItemEntity을 가정 해 봅시다. 관계는 CategoryEntity (항목이없는 범주가있을 수 있음)에 대해서는 선택적이지만 모든 ItemEntity에 필요합니다. 앱이로드 될 때 카테고리는 이미 상점에 있으며 ItemEntities를 가져 와서 해당 CategoryEntity에 연결하려고합니다.내가 일대 다 관계를 통해 연결된 두 기관이 코어 데이터

은 분명히 그래서

.. 약 4000-6000 항목마다있을 것 때문에 좋은 해결책이되지 않을 것 일치하는 범주를 찾기 위해 각 ItemEntity에 대한 FetchRequest을 실행, 내가 할 수있는 더 효율적인 것이 있습니다 ?

+0

가져 오기는 관리 객체 (MO)를 검색하는 데 사용됩니다. 질문을 명확히 할 수 있습니까? CategoryEntity MO 인스턴스를 ItemEntity MO 인스턴스에 지정하는 방법을 묻고 있습니까? 또는 CategoryEntity 할당이없는 ItemEntity MO 목록을 가져 오는 방법을 묻고 특정 CategoryEntity MO를 할당하는 방법을 묻는 중입니까? –

+0

예, 제 질문에 명확하지 않았습니다. 새로 생성 된 ItemEntity MO 인스턴스에 CategoryEntity MO 인스턴스를 지정하는 방법을 묻습니다. 모든 ItemEntity MO는 적절한 CategoryEntity MO에 할당되어야합니다. 카테고리를 더 빨리 참조하기 위해 사전을 사용하여 만들었지 만 더 나은 아키텍처는 환영합니다. – johnl

답변

2

핵심 데이터 모델을 올바르게 설정했다면 카테고리 엔티티에서 카테고리 엔티티로의 일대일 관계와 항목에서 카테고리에 대한 역대 관계가 있습니다. 또한 일대일 관계에 대한 "계단식"삭제 규칙과 일대일 관계에 대한 "무효화"삭제 규칙이 있습니다.

이렇게 가정하면 Item 객체를 삽입 할 때마다 범주 관계를 설정하면 항목이 해당 범주에 자동으로 삽입됩니다. 항목을 삭제하면 해당 범주에서 항목이 자동으로 제거됩니다.

범주 측면에서 범주를 제거하면 해당하는 모든 Item 개체가 자동으로 제거됩니다.

따라서 항목을 가져올 때 각 Item 객체에 대해 해당 Category 객체를 이미 가져 왔습니다. 너는 다른 일을 할 필요가 없다. 기본적으로 가져 오기 중에 Category 객체를 실제로 검색하지는 않습니다. 대신 객체에 처음 액세스하려고 시도 할 때 오류가 발생하고 그 시점에 객체가 검색됩니다. 방금 가져온 Item 객체에 저장된 Category 객체를 즉시 사용하지 않으려는 경우 성능이 향상됩니다. 당신이 범주 객체에게 당신이 항목을 가져 오는 거의 모든 시간을 사용하려는 경우, 당신은 당신이 지금 오류를 원하고 당신이 당신의 분류 관계를 프리 페치 요청하는 것이 그 핵심 데이터를 이야기하는 NSFetchRequest 방법

- (void)setReturnsObjectsAsFaults:(BOOL)yesNo 
- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys 

를 사용해야합니다.

0

'가져 오기'항목 항목을 말할 때 무엇을 의미합니까? 다른 코어 데이터 저장소에 있습니까? 파일의 다른 형식으로 정의되어 네트워크를 통해 검색됩니까?

한 가지 방법은 모든 카테고리를 한 번에 가져 와서 캐시로 작동하는 NSDictionary에 추가하고 빠른 검색을 수행 할 수있는 식별 값을 입력하는 것입니다. 가져 오는 동안 인스턴스화하는 각 항목 엔티티 (그 의미가 무엇이든)는 해당 범주 ID를 검색 한 다음 캐시에서 범주 MO를 검색합니다. 관계를 설정하고 저장하십시오. 더 좋은 방법은 수많은 삽입을 배치하고 10, 100 또는 1000을 절약하여 IO 오버 헤드를 줄입니다.

관련 문제