2015-01-06 4 views
1

내 현재 설정 :NSFetchedResultsController 발사하지 controllerDidChangeContent

나는 내가있는 tableview에 표시하고자하는 데이터를 전환하는 UISegmentedControl을 사용하려는. 나는 webservice에 대한 모든 편안한 대화를 위해 restkit을 사용 해왔다. 데이터는 coredata sqlite 저장소에 저장됩니다. 다음과 같은 방식으로 NSFetchedResultsController를 설정했습니다.

-(void)setupFetchedResultsControllerWithFetchRequest:(NSFetchRequest *)fetchRequest{ 

    self.fetchedResultsController=nil; 

    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"address" ascending:YES]; 
    fetchRequest.sortDescriptors = @[descriptor]; 
    NSError *error = nil; 
    // Setup fetched results 
    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                     managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 
    [self.fetchedResultsController setDelegate:self]; 
    BOOL fetchSuccessful = [self.fetchedResultsController performFetch:&error]; 
    // NSAssert([[self.fetchedResultsController fetchedObjects] count], @"Seeding didn't work..."); 
    if (! fetchSuccessful) { 
     ShowAlertWithError(error); 
    } 

} 

그리고 이것은 fetchedresultscontroller로 전달하기위한 페치 요청을 작성한 방법입니다.

-(NSFetchRequest *)prepareFetchRequestForGlobalAtm{ 

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"AtmBranches"]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"branchType='0'"]; 
    [fetchRequest setPredicate:predicate]; 
    return fetchRequest; 

} 

나는 segmentedControlToggledMethod에서 이들을 적절하게 결합했습니다.

[self setupFetchedResultsControllerWithFetchRequest:[self prepareFetchRequestForGlobalAtm]]; 

//Restkit Call 
[self loadGlobalAtms]; 

NSFetchedResultsController의 위임 방법입니다. 여기

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    [self.locationsTableView reloadData]; 
} 

내 논리는 모든 전환이 전달 된 값에 따라 NSFetchedResultsController를 설정하는 방법을 해고해야한다는 것입니다. 내가 웹 서비스에서 들어오는 값을 가지고 캐싱되고 있음을 로그에서 명확하게 볼 수 있지만 tableview 자체는 절대 채워지지 않습니다.

답변

3

데이터를 변경하지 않아 알림을받을 수 없습니다.

self.fetchedResultsController를 사용하여 가져 오기를 수행하면 이미 모든 개체를 얻었습니다.

삽입 할 때 당신은 mainManagedObjectContext 또는 그 하위에/삭제/업데이트

당신이

[self.fetchedResultsController setDelegate:self]; 
BOOL fetchSuccessful = [self.fetchedResultsController performFetch:&error]; 
// NSAssert([[self.fetchedResultsController fetchedObjects] count], @"Seeding didn't work..."); 
if (! fetchSuccessful) { 
    ShowAlertWithError(error); 
} 
[self.locationsTableView reloadData]; 

좋아해요 그리고 논리를 유지해야 대리인 콜백

+0

ManagedObjectContext

대리인의 콜백을받을 수

작동하지 않습니다. tableview 그냥 재부팅 실 거예요. –

+0

당신의 테이블 뷰는 다시로드 할 때 필요하지 않습니다? – Suen

+0

[self loadGlobalAtms]를 호출 한 후; managedObjectContext를 사용하여 데이터를 저장 해 봤습니까? – Suen

관련 문제