2013-08-11 3 views
0

coredata를 사용하여 앱을 개발합니다.NSFetchedResultsController가 해제 모드에서 작동하지 않습니다.

그러나 AdHoc 또는 릴리스 모드에서는 NSFetchedResultsController를 사용하여 데이터에서 데이터를 가져올 수 없습니다. 디버그 모드에서 데이터를 가져올 수 있습니다.

따라야 할 코드.

NSFetchRequest *req = [[NSFetchRequest alloc] initWithEntityName:MODEL_NAME] ; 
[req setFetchBatchSize:20] ; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderIndex" ascending:YES]; 
[req setSortDescriptors:[[NSArray alloc] initWithObjects:sortDescriptor, nil]] ; 
NSFetchedResultsController *res = [[NSFetchedResultsController alloc] initWithFetchRequest:req managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil] ; 
NSAssert([res performFetch:nil], @"Fetch failed") ; 
int dataCounter = [[[res sections] objectAtIndex:0] numberOfObjects] ; 
// In Release mode:0, in Debug mode:2 
NSLog(@"dataCounter:%d",dataCounter) ; 

이렇게 변경하면 릴리스 또는 디버그 모드가 변경됩니다. 제작> 스키마> 구성표 편집> 실행> 구성 작성을 누릅니다.

봉투 : 엑스 코드 4.6.3, 자료 SDK 아이폰 OS 6.1

당신은 어떤 도움이 있습니까?

감사합니다.

+0

'performFetch :'의'error :'매개 변수를 사용해야하고 가져 오기가 실패하면 오류를 출력해야합니다. –

+0

Doesmit 예외가 발생합니까? 이게 뭐야? – Wain

+0

귀하의 회신에 감사드립니다. 오류가없고 예외도 없습니다. 단지 0 데이터 ... – sekitaka

답변

0
NSAssert([res performFetch:&error], @"Fetch failed") ; 

이 코드는 잘못되었습니다.

I 릴리스 모드에서 기타 C/C++ 플래그 "-DNS_BLOCKS_ASSERTIONS = 1"을 설정합니다. 이 플래그는 NSAssert 행을 제거합니다. 따라서 performFetch는 exec가 아닙니다.

감사합니다.

관련 문제