2009-10-27 3 views
2

많은 일대일 관계가있는 엔터티가 있습니다. NSFetchedResultsController를 사용하여 엔티티의 특정 속성을 테이블 뷰에 표시합니다. 엔티티가 가지고있는 모든 관계 중 단 1 개의 관계 값만 표시됩니다 (현재 cellforrowat ... 메소드에서 오류가 발생했습니다). 이것이 성능에 영향을 줄 수 있다고 생각됩니다. 페치 요청을 생성 할 때 특정 관계를 잘못 할 수 있습니까? CoreData는 테이블을 스크롤 할 때 값을 가져올 필요가 없습니까?주 엔터티를 가져올 때 CoreData 관계가 잘못되었습니다.

답변

2

설명하는 데이터 모델을 잘 모르겠습니다. 엔티티의 many-to-many 관계 중 하나의 멤버 만 테이블 행의 내용으로 표시하는 경우 가져 오기 요청에서 -setPropertiesToFetch :를 사용하여 표시된 각 행에 표시되는 속성 만 가져올 수 있습니다 당신이 설명하는 것은 일 관계에서되는 테이블 행에 표시되는 요소 중 하나와 기관의 목록 인 경우 배리 알처럼

NSArray *propertiesToFetch = [[NSArray alloc] initWithObjects:@"title", @"thumbnailImage", nil]; 
[fetchRequest setPropertiesToFetch:propertiesToFetch]; 
[propertiesToFetch release]; 

그러나이 -setRelationshipKeyPathsForPrefetching:을 사용할 수 있습니다 : 예를 들면 다음과 같습니다. 그러나이 경우 데이터 모델을 비정규 화하여 해당 속성을 관계 내에서 원래 엔터티 내로 직접 이동하는 것이 좋습니다. 트래 버 싱 관계는 속성에 액세스하는 것보다 훨씬 비쌉니다.

1

수동으로 개체에 오류가 발생할 수 있지만 아무 것도 얻을 수 없다고 생각합니다. 한 번에 모든 개체에 오류가 발생 했든 필요에 따라 한 번에 하나씩 오류가 발생하는지 여부에 관계없이 각 개체는 여전히 개별적으로 오류가 발생합니다.

나는 당신이 묘사하는 것과 똑같이, 테이블 뷰에 표시하기 위해 많은 양의 데이터를 담고 있으며 성능 저하를 전혀 느끼지 못하는 앱을 작성했습니다. 표시 할 테이블 뷰 셀에 해당하는 객체 만 오류가 있음을 기억하십시오.

일반적으로 핵심 데이터를 능가하려고하지 마십시오. 이 시점에서 수년간 성능 최적화가 이루어졌습니다. 직관적으로, 100 개의 객체에서 100 개의 데이터베이스 쿼리가 필요하다는 오류가있는 것처럼 보일 수 있지만, 반드시 그런 것은 아닙니다.

2

첫 번째로 기본 코어 데이터 동작이 제안 된 방식보다 성능이 떨어지는 것으로 가정하지 않습니다. 데이터를 백업하지 않으면 최적화가 거의 실패 할 것입니다.

즉, 나는 -[NSFetchRequest setRelationshipKeyPathsForPrefetching:]이 당신이 원하는 것을 성취 할 것이라고 믿습니다.

관련 문제