다음 코드는 tabbarcontroller의 두 번째 탭에 설정되어 있습니다. 탭에 처음 들어가면 데이터가 예상대로 올바르게 가져옵니다. 그러나 탭을 빠져 나와서 돌아 오면 array
은 가져 오기 요청에 의해 반환 된 항목을 두 번 포함합니다. 반환하는 각 객체는 복제됩니다. 탭을 빠져 나와 다시 방문하면 항목이 다시 복제되어 각 항목이 3 개씩 표시됩니다. 이런 일이 일어나기를 바라는 나의 요청에 내가 뭘 잘못하고 있니?후속 실행시 중복 결과를 반환하는 FetchRequest
- (void)viewWillAppear:(BOOL)animated {
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:delegate.managedObjectContext];
[fetchRequest setEntity:entity];
// sort the results, since we want the most recent entry first
NSSortDescriptor *dateSort = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateSort];
[fetchRequest setSortDescriptors:sortDescriptors];
NSError *error;
NSMutableArray *array = [[delegate.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
NSLog(@"error %@",[error localizedDescription]);
self.fetchedObjects = [array copy];
[array removeAllObjects];
[self.tableView reloadData];
}
업데이트 : 내가 NSFetchedResultsController로 전환이 내 문제를 해결.
아니요, 가져온 결과 컨트롤러를 사용하고 있지 않습니다. 컬렉션을 변경하지 않고 테이블보기로 표시합니다. 데이터를 다른 탭에서 추가 할 수 있습니다. 따라서 viewWillAppear에서 다시 가져옵니다. 데이터베이스에는 추가 오브젝트가 포함되지 않고 후속 호출의 배열 만 포함됩니다. –
이 컨트롤러의 모든 메서드에 중단 점을 놓고 배열의 개수가 어디인지 확인해야합니다. setFetchedAttributes의 사용자 정의 구현이 있습니까? –
페치가 실행되면 카운트가 두 배가됩니다. 가져 오기 전후에 배열을 검사하면 중복 된 항목을 볼 수 있습니다. 첫 번째 실행에서 올바른 금액을 반환합니다. 아니요, 맞춤 구현이 없습니다. –