2012-08-22 2 views
2

내 프로젝트에서 핵심 데이터를 사용하고 있으며 데이터 오류시 스템을 사용하여 캐시 된 데이터를 반환했지만 데이터를 표시 할 때 성능 문제가 특히 많이 발생했습니다. 이 가져온 데이터를 기반으로보기를 구성하는 UITableView에서핵심 데이터를 사용할 때 UI 성능 향상

기본적으로 고유 ID를 통해 일부 NSManagedObject 인스턴스를 가져오고 NSNumber에 저장된 값을 요약합니다. 이것은 for 루프 내부의 약 40 개의 다른 객체에 대해 이것을 수행하고 UITableView가 다시로드 될 때마다 이것을 수행합니다.

핵심 데이터 NSManagedObjects 또는 내 수준에서 데이터를 캐시하는 방법에 대한 변경 사항을 수신 할 제안 된 방법이 있습니까? 아니면 데이터 오류에 의존해야합니까?

이 상황을 처리하는 데 좋은 패턴을 지적 할 수 있다면 대단히 감사 할 것입니다.

+0

개체의 고유 ID에 대한 색인이 있습니까? 인덱싱 된 40 개의 개체를 가져 오는 데 너무 오래 걸리지 않아야합니다. 핵심 데이터를 처리하는 코드를 게시 할 수 있습니까? –

+0

물론 약간의 코드를 추가하겠습니다. –

답변

5

NSFetchedResultsController는 오류를 처리하고 UITableView로 깨끗한 인터페이스를 제공하는 훌륭한 메커니즘을 제공합니다. Instruments와 Time Profiler를 사용하여 구체적으로 성능 문제가있는 곳을 잘 파악하십시오.

1

코어 데이터를 사용하여 속성 합계를 직접 검색 할 수 있습니다. Fetching Specific Values 섹션을 읽어보십시오.

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"Count"]; 
NSExpression *sumOfCountExpression = [NSExpression expressionForFunction:@"sum:" 
              arguments:[NSArray arrayWithObject:keyPathExpression]]; 

이것은 당신이 당신의 테이블에 너무 많은 시간을 다시로드하지 않는 한, 문제를 일으킬 정도로 느린 안 :

당신이 필요로하는 유일한 팁해야합니다.

1

가장 먼저해야 할 일은 NSFetchedResultsController를 사용하는 것입니다. 그것은 UITableview와 함께 작동하도록 만들어졌으며 여기에서 성취하려는 것을 잘 수행합니다. 두 번째로 가져 오기 요청에 fetchBatchSize를 할당합니다. 모든 기록을 메모리에 둘 필요는 없습니다.