NSfetch请求返回相同的数据始终不返回更新的数据

时间:2014-09-01 06:49:25

标签: ios objective-c ipad core-data nsfetchedresultscontroller

我正在使用核心数据开发一个iOS应用程序。我正在使用Rest工具包连接Web服务,在休息工具包的帮助下,我将同步来自Web服务的数据并存储在我的本地核心数据库中。它是对我工作正常。当我将调用获取请求时,数据正在变得正确。但是过了一段时间我想从Web服务获得最新的更新数据,如果我再次同步,最新的数据正在我的数据库中正确获取和替换。

但是,如果我尝试获取最新数据,则获取请求将返回保存在数据库中的第一个数据。但是,如果我重新启动我的应用程序,获取请求将返回更新的数据。实际问题是什么。我是iOS的新手,所以我不明白这个问题。我将如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

尝试使用NSFetchedResultsController

@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;


 - (void)viewDidLoad
 {
     [sef fetchAll];
 }


 // initialize and  fetch all data and also implements it's delgate

#pragma mark Fetch All Data from core data
 -(void)fetchAll
{
   NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"SongInfo"];
   NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"songTitle" 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) {
    // RKTwitterShowAlertWithError(error);
   }

   if ([[self.fetchedResultsController fetchedObjects]count ]==0) {
       // reload your table
   }
   else
   {

   }

}


  #pragma mark - NSFetchedResultsControllerDelegate

 - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
  {
    [tbl relodaData];
    // reload your view here
  }

答案 1 :(得分:0)

首先确保在将本地数据库与REST服务同步后正确调用context save方法。

如果您正在使用fetchedResultsController,则可能由于缓存数据而发生。尝试清除缓存的数据以获取正确更新的数据,

- (NSFetchedResultsController *)fetchedResultsController {

  if (_fetchedResultsController != nil) {
     return _fetchedResultsController;
  }

  // Clear cache
  [NSFetchedResultsController deleteCacheWithName:@"Root"];

  // Your codes

}