2009-07-13 6 views
4

코어 데이터 저장소에서 임의의 항목의 고정 번호를 선택하는 방법이 있습니까? 나는 Core Data를 시작하기 시작했으며이 문제에 대해 오랫동안 고심 해왔다.코어 데이터 저장소에서 무작위 항목 선택

마지막 수단으로 많은 항목을 메모리에 쿼리 한 다음 고정 된 번호를 임의로 선택할 수 있습니다.

또한 핵심 데이터 저장소에서 실행될 사용자 지정 SQL 문을 지정하는 방법이 있습니까? 저장소의 기본 구현이 XML 파일 일 수도 있기 때문에 이것이 거의 일어나지 않을 것이라는 것을 알고 있습니다.

답변

2

음 ... 어쩌면 r은 0과 사물을 뺀 수 사이의 임의 INT는

[[[managedObjectsContext registeredObjects] allObjects] objectsAtIndex:r] 

어디? 빠르고 효율적이지는 않지만 쉽고 빠릅니다.

편집 : 당신이 당신의 객체의 선택 사이의 임의의 개체를 선택하려면 다음 쿼리 결과 위와 같은 개체의 선택을 설명 요청을 가져오고 어떻게 만들 :

[[[managedObjectsContext executeFetchRequest:request error:&error] objectAtIndex:r] 
+0

내 저장소의 모든 관리 개체가 동일한 유형이 아닙니다. 특정 유형의 무작위 항목을 원합니다. 등록 된 모든 개체 중에서 무작위 개체를 선택하면 작동하지 않을 수 있습니다. 내 항목에 ID 필드를 사용하고 있습니다. 다행히도 필자는 누락 된 ID 값이 없다는 것을 알고 있습니다. 난 그냥 임의로 신원 값을 선택하고 같은 것을 사용하여 NSPredicate를 지정합니다. 이것이 현재는 효과가 있지만 더 좋은 방법이 있어야합니다. 도움 주셔서 감사합니다. – Buzzy

0

두 번째 질문과 관련해서는 핵심 데이터 저장소를 추상화하는 핵심 데이터 중 하나입니다. NSPredicate와 NSExpressions를 사용하여 가져 오기 요청을 작성하거나 데이터 모델에 저장하는 것이 저장소를 쿼리하는 유일한 방법입니다.

0

잘 모르겠지만 코어 데이터가 데이터를 NSSets에 넣습니다. 따라서 [NSSet anyObject]를 사용할 수 있습니다. 나는 그걸 시험해 보지 않았다.

+2

-anyObject는 개발자의 관점에서 볼 때 무작위 적이지만 실제로는 내부 데이터 저장소의 루트에있는 객체 일 뿐이므로 실제로는 내부 객체의 내용이 될 때까지 동일한 객체가됩니다. 세트가 변경됩니다. – TALlama

+0

아하! 명확히 해 주셔서 감사합니다. –