2013-05-30 4 views
3

'countForFetchRequest'를 실행하고 있으며 항상 내 테이블의 레코드 수보다 1 더 많은 수를 반환합니다.빈 테이블에 대해 1을 반환하는 countForFetchRequest

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"TESTDATA" inManagedObjectContext:self.managedObjectContext]]; 

NSError *error = nil; 
NSUInteger count = [self.managedObjectContext countForFetchRequest:request error:&error]; 
if(count == NSNotFound) { 
    // Handle error 
} 

return count; 

테이블이 비어 있으면 1을 반환합니다. 내 테이블에 행이 3 개있는 경우 4를 반환합니다.

sqlite> select count(*) from ZTESTDATA; 
0 
sqlite> 

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

+0

모든 개체를 저장 했습니까? – Wain

+0

개체의 수를 가져 오기 전에 모든 개체를 직접 제거하려고 시도 했습니까? –

+0

@Kraken, 예 모두 삭제합니다 (실제로 데이터베이스를 제거하고 다시 작성하십시오). 그런 다음 count가 0으로 되돌아옵니다. 그런 다음 앱을 다시 시작하면 카운트가 있어야하는 것보다 많습니다. 관계없이 내가 수행하는 원시 SQL 쿼리는 항상 올바른 카운트를 가지고 있으며, 핵심 데이터 쿼리가 엉망인 것처럼 보입니다. – lostintranslation

답변

6

카운트는 항상 정확하지만 메모리에 저장된 내용 (아직 저장되지 않음)과 디스크에있는 내용을 모두 계산합니다.

다른 사람들이 제안했듯이 카운트 대신 가져 오기를 수행하고 핵심 데이터가 찾은 것을 인쇄하면 답을 찾을 수 있습니다.

+0

fetchRequest.includesPendingChanges = false가 작업을 수행 할 것이라고 생각합니다. – Shay

관련 문제