2010-08-03 12 views
9

मैं एक अलग विधेय जो एक बूलियन मान का उपयोग कर सेट किया जाता है का उपयोग कर मेरी NSFetchedResultsController से डेटा को फिर से लाएं करना चाहते हैं। डेटा का एक नया सेट लाने के लिए मैं NSFetchedResultsController को रीफ्रेश कैसे करूं?NSFetchedResultsController को फिर से लाएं ताज़ा?

- (void)refreshFetchedResultsController { 
    NSLog(@"refreshFetchedResultsController"); 

    NSError *error = nil; 
    if (![[self fetchedResultsController] performFetch:&error]) { 
     UIAlertView *alert = [[UIAlertView alloc] 
           initWithTitle:NSLocalizedString(@"Error loading data", 
                   @"Error loading data") 
           message:[NSString stringWithFormat: 



            NSLocalizedString(@"Error was: %@, quitting.", @"Error was: %@, quitting."), 
            [error localizedDescription]] 
          delegate:self 
          cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") 
          otherButtonTitles:nil]; 
    [alert show]; 
} 

}

जो

- (NSFetchedResultsController *)fetchedResultsController { 
    if (_fetchedResultsController != nil) { 
     NSLog(@"i was executed."); 
     return _fetchedResultsController; 
    } 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    TapAppDelegate *appDelegate = (TapAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Favorite" inManagedObjectContext:managedObjectContext]; 

    NSString *sectionKey = @"favname"; 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"favname" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 


    if(showAll == NO){ 
     if(isXSelected == NO){ 
      NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFirst == TRUE"]; 
      [fetchRequest setPredicate:predicate]; 
     } 

     if(isXSelected == YES){ 
      NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFirst == FALSE"]; 
      [fetchRequest setPredicate:predicate]; 
     } 
    } 

    [fetchRequest setSortDescriptors:sortDescriptors]; 
    [fetchRequest setEntity:entity]; 
    [fetchRequest setFetchBatchSize:20]; 

    NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] 
             initWithFetchRequest:fetchRequest 
             managedObjectContext:managedObjectContext 
             sectionNameKeyPath:sectionKey 
             cacheName:nil]; 

    [sortDescriptor release]; 
    [sortDescriptors release]; 

    frc.delegate = self; 
    _fetchedResultsController = frc; 
    [fetchRequest release]; 
    return _fetchedResultsController; 
} 

उत्तर

28

कॉल यहाँ कैसे हम एक आवेदन पत्र में कर दिया गया है:

// Assuming these exist 
NSPredicate * predicate; 
NSString * cacheName; 

[[fetchedResultsController fetchRequest] setPredicate:predicate]; 
[NSFetchedResultsController deleteCacheWithName:cacheName]; 

NSError * error = nil; 
[fetchedResultsController performFetch:&error]; 
if (error) { 
    // report error 
} 
+0

मैंने यह किया है, लेकिन जब मैं समारोह को याद करता हूं, तो यह नया अनुरोध निष्पादित नहीं करता है। (ब्यूरोन्स के साथ बयान जारी किए जाने पर मेरी भविष्यवाणियों को लपेटा जाता है)। –

+0

दरअसल, आप सही हैं। उसके लिए माफ़ करना। मदद के लिए बहुत बहुत धन्यवाद। –

+0

@corykilger, धन्यवाद! [NSFetchedResultsContrller deleteCacheWithName: कैशनाम]; वही था जो मुझे चाहिए था! – daveomcd

8

मत भूलना performFetch से पहले fetchedResultsController = नहीं के बराबर सेट करने के लिए। अन्यथा यह पुराने का उपयोग करेगा।

-2

मैं इसी तरह की समस्या थी, मैं समझ नहीं सकता क्यों मेरे संग्रह दृश्य अपनी कोशिकाओं से ताज़ा नहीं है। नीचे दी गई विधि को जोड़कर मेरी समस्याएं ठीक हुईं।

-(void)didUpdateObjectAtIndexPath:(NSIndexPath *)indexPath{ 
    UICollectionView *strongCollectionView = self.collectionView; 
    [strongCollectionView reloadItemsAtIndexPaths:@[indexPath]]; 


} 
संबंधित मुद्दे