2016-06-30 2 views
0

Core Data를 만난 지 오래되었지만 이제는 응용 프로그램을 이동하려고합니다. 데이터는 서버에서 JSON으로 다운로드되어 몇 개의 플랫 파일로 저장됩니다.핵심 데이터 채택, 여러 기준에 의한 필터링. NSPredicate를 원하니?

사용자가 앱과 상호 작용할 때 특정 화면 (수백 개의 항목)에 대한 전체 데이터 세트를 한 번에 메모리에로드합니다. 그런 다음 사용자는 거리에 따라 레코드 (필자의 경우 장소)를 필터링 할 수 있습니다. (위치는 Core Data에서 제공합니다.)

사용자는 Venue 관리 대상 개체의 여러 가지 다른 속성을 기준으로 필터링하고 검색어를 입력 할 수도 있습니다.

사용자가 데이터를 검색, 정렬 및 탐색 할 수 있도록이 모든 필터를 결합하려고합니다. 메모리에 NSArray를 사용하여 이러한 모든 작업을 수행하는 코드를 작성했지만 성능이 떨어졌습니다.

여기 NSPredicate를 사용하고 싶습니까? NSManagedObject의 속성으로 필터링하는 데 사용할 수는 있지만 사용자로부터의 거리와 같은 일시적인 특성의 경우 어떻게 작동하는지 잘 모르겠습니다.

핵심 데이터에서이를 달성하기위한 일반적인 단계는 무엇입니까?

+1

해당 json에서 일부 필드 반환을 공유 할 수 있습니까? 나는 데이터가 거리가 아닌 좌표가있는 장소 목록이라고 가정합니다. 왜냐하면 json을받은 후에 거리 계산을 수행 할 것이라고 생각하기 때문입니다. – xmhafiz

답변

0

NSPredicate를 필터링 기준의 대부분으로 사용하고 싶지만, 슬라이스 방식으로 코어 데이터를 위치별로 정렬 할 수 없습니다.

알파벳순 필터링은 NSFetchedResultsController으로 수행 할 수 있으며 'type'속성과 검색어로 필터링 할 수도 있습니다.

코어 데이터는 SQL 문으로 컴파일 할 수있는 정렬 설명자를 필요로하기 때문에 인터넷의 다른 곳에서 언급 한 것처럼 NSSortDescriptor 블록은 원하는대로 처리하지 못합니다. 또한 Core Data는 SQL 위치 계산 방법을 모릅니다.

1

지금까지 거리와 핵심 데이터와 같은 :

스토어 위도 긴 독립적으로, 사용자에 센터가 그 "광장"에서 모든 쿼리와 검색 반경 (일명, 사각형의 내부 반경 원)이 내부에 맞는지

수동으로 메모리에 모서리에 결과를 밖으로 던져

지금까지 총 쿼리로 : 당신의 조건에 어떤 규칙이 놀라운

+0

위치별로 필터링하지 않으려 고합니다. 거리는 코어 위치로 계산할 수 있습니다. 또한 모든 항목을 가장 가까운 순서로 나열해야하므로 내 문제가 해결되지 않습니다. – Moshe

+0

전화기의 간결성에 대한 사과 : NSSortDescriptor는 주문에 도움이됩니다. – Michael

0

내가 지리적 쿼리 쿼드 트리를 사용을 할 것입니다 . 어레이를 스캔하는 것보다 훨씬 빠릅니다. 내 코드는 Wikipedia entry on Quadtrees에서 파생됩니다. MKMapView에 quadtree를 사용하는 것에 대한 몇 가지 블로그 게시물이 있습니다. NSPredicate는 Core Data 특정 필터가 아닙니다. 모든 NSArray에 적용 할 수 있습니다. 데이터 세트가 수백 포인트에 이르면 루프보다 빠르게 실행됩니다.

관련 문제