2012-04-14 2 views
2

몇 번을 호출 할 때 내 응용 프로그램 문제가 발생할, 내 viewWillAppear에서 내가 어떤 임의의 경우에내가 performFetch에게 나는 스탠포드 코스 cs193p에서 CoreDataTableViewController을 사용하고

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                    managedObjectContext:self.dataBase.managedObjectContext 
                     sectionNameKeyPath:nil 
                       cacheName:nil]; 

느릅 나무를 호출하는 내 응용 프로그램 동결한다 (이것은 '아무튼 t는 부수다, 그것은 단지 얼 린다). 세터가 호출 [자기 performFetch, 느릅 나무를 만드는 CoreDataTableViewController에 은 다음과 같습니다

- (void)performFetch 
{ 
    if (self.fetchedResultsController) { 
     if (self.fetchedResultsController.fetchRequest.predicate) { 
      if (self.debug) NSLog(@"[%@ %@] fetching %@ with predicate: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName, self.fetchedResultsController.fetchRequest.predicate); 
     } else { 
      if (self.debug) NSLog(@"[%@ %@] fetching all %@ (i.e., no predicate)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName); 
     } 
     NSError *error; 
     NSLog(@"before"); 
     [self.fetchedResultsController performFetch:&error]; 
     NSLog(@"after"); 
     if (error) NSLog(@"[%@ %@] %@ (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), [error localizedDescription], [error localizedFailureReason]); 
    } else { 
     if (self.debug) NSLog(@"[%@ %@] no NSFetchedResultsController (yet?)", NSStringFromClass([self class]), NSStringFromSelector(_cmd)); 
    } 
    [self.tableView reloadData]; 
} 

와가에 박히 라인이

[self.fetchedResultsController performFetch:&error]; 

어떤 제안이?

+0

이 문제의 해결책을 찾으셨습니까? 나는 같은 문제를 겪고있다. – user427969

답변

0

백그라운드 스레드에서 발생하기 때문에이 호출은 GUI를 정지시키지 않습니다. 따라서 GUI가 매달려 있으면 다른 문제입니다.

정상적인 작동 상태에서 전화 할 필요는 없습니다. 가에있다,

실행 취소 관리자를 사용하거나, 제 경우에는

[doc updateChangeCount: UIDocumentChangeDone]; 
+0

당신이 옳습니다. [self.navigationController popViewControllerAnimated : YES]를 호출하면 막히게됩니다. 왜 그럴거야? – litov

+0

디버거에서 단계별로 수행하십시오. –

+0

더 많은 시험을 마친 후에 나는 문제의 범위를 좁힐 수 있었고 완전히 나의 질문을 바 꾸었습니다. pls 다른 모습을 볼 수 있습니까? – litov

0

전화, 난 viewWillAppear 방법에 PerformFetch를 호출했다 을 : 일반적으로, 당신은 UIManagedDocument의 변경 사항을 저장하는 두 가지 중 하나를 수행해야합니다 navigationController를 사용하는 경우에도 viewDidLoad() 메서드을 호출해야합니다. 우리가 두 번째 전방 veiwWillappear 메서드를 알고있는 것처럼 performseguewithidentifer (push)를 호출하는 경우,이 문제에 대해 걱정하지 마라. fetechresultcontroller는 move-back-next에서 매번 호출된다.

누군가가 도움이되기를 바랍니다.