2012-06-24 3 views
1

코어 데이터로 프리 페칭에 대한 올바른 이해가 있는지 확인하려고합니다. MBDate 속성과 일대일 관계가있는 Message 객체의 batchSize가 20 인 가져 오기 요청을 실행하고 있습니다. 내가프리 페치가 오류를 반환해야합니까?

if(message.date.isFault) NSLog(@"isFault");,

을 할 경우, 단지 첫 번째 배치에,

CoreData: annotation: Prefetching with key 'date'. Got 9 rows. 
CoreData: annotation: total fetch execution time: 0.0094s for 20 rows 

그러나이 출력 같이

[fetchRequest setRelationshipKeyPathsForPrefetching: 
      [NSArray arrayWithObjects:@"date", nil]]; 

프리 페치 명령을 통해 진행 :이 속성을 프리 페치

내가 프리 페치하더라도 항상 isFault을 출력합니다! 나는 MBDate 객체의 속성 고장 요청 화재에 액세스하려고한다면 :

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZDATE, t0.ZDATESTRING FROM ZMBDATE t0 WHERE t0.Z_PK = ? 
CoreData: annotation: sql connection fetch time: 0.0008s 
CoreData: annotation: total fetch execution time: 0.0014s for 1 rows. 
CoreData: annotation: fault fulfilled from database for : 0x85d22b0 <x-coredata://736D04C4-7DB3-40B7-B208-79B5DFD68260/MBDate/p61> 

이유는 프리 페치가 겪고되지 않는 이유는 무엇입니까? 왜 내 물건은 여전히 ​​결함이 있습니까? 명확한 답변을 제공하는 것이 어렵다는 것을 알고 있지만 팁이나 아이디어는 훌륭합니다.

답변

1

배치 크기를 설정하지 않고도 똑같은 방법을 시도해 볼 수 있습니까?

fetchBatchSize에서 NSFetchRequest 클래스 참조에 호기심 주석이 :

0이 아닌 배치 크기를 설정하면

는, 개체의 컬렉션이 반환이 때 일괄 처리로 분리되어 실행 가져옵니다. 가져 오기가 일 때 전체 요청이 평가되고 일치하는 개체의 ID가 기록되지만 batchSize 개체의 데이터는 개가 아닌 한 번에 영구 저장소에서 가져옵니다. 요청을 실행하여 배열 이 반환되면 프록시 객체 인 은 요청시 일괄 적으로 오류를 처리합니다.

batchSize를 설정 한 것처럼 반환되는 객체는 무엇이든지간에 오류가 발생합니다.

+0

하지만 배치 크기가 100이었을 때 오류가 발생하는 매 5 개의 개체처럼 내 배치 크기보다 훨씬 작은 비율로 오류가 발생하는 것을 확인하십시오. 내 날짜를 가져 와서 배열에 배치하기 위해 별도의 가져 오기를 실행하는 결과가 발생했습니다. , 자동으로 "프리 페치 (prefetch)"하여 다른 것을하지 않고 나를 위해 – Snowman

관련 문제