NSfetch 请求返回相同的数据总是不返回更新的数据

Posted

技术标签:

【中文标题】NSfetch 请求返回相同的数据总是不返回更新的数据【英文标题】:NSfetch Request Returns The Same Data Always Not Returns the Updated Data 【发布时间】:2014-09-01 06:49:25 【问题描述】:

我正在使用核心数据开发一个 ios 应用程序。我正在使用 Rest 工具包连接 Web 服务,在 rest 工具包的帮助下,我正在同步来自 Web 服务的数据并存储在我的本地核心数据库中。它是对我来说工作得很好。当我调用获取请求时,数据是正确的。但是一段时间后,我想要来自网络服务的最新更新数据,如果我再次同步,最新数据会在我的数据库中正确获取和替换。

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

【问题讨论】:

请发布您的代码。 @Timuçin 哪个代码获取请求代码?还是数据映射代码? 你使用的是 fetchedResultsController 还是简单的 fetchRequest? 【参考方案1】:

试试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
  

【讨论】:

我在很多地方都在使用 fetch 请求。其实nsfetch请求和nsfetch请求控制器有什么区别? 获取的结果控制器委托将在内容发生更改时收到通知,让委托有机会在表格视图中对更改进行动画处理【参考方案2】:

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

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

- (NSFetchedResultsController *)fetchedResultsController 

  if (_fetchedResultsController != nil) 
     return _fetchedResultsController;
  

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

  // Your codes


【讨论】:

我没有使用 fetchedResultsController。仅获取请求。 首先我在应用程序委托中编写了上下文保存功能,但现在将上下文保存功能添加到我的视图控制器中并再次检查没有更改 @user3762713 如果您使用的是 REST Kit,则来自服务的数据将使用 mainQueueManagedObjectContextRKManagedObjectStore 存储。对?您是否使用相同的上下文来获取数据? 我正在使用 RKManagedObjectStore。是相同的上下文来获取数据。我使用核心数据编辑器检查了我的本地数据库,并确保更新的数据在数据库中。另一件事是有时我在获取请求中获取更新的数据,有时是旧数据。

以上是关于NSfetch 请求返回相同的数据总是不返回更新的数据的主要内容,如果未能解决你的问题,请参考以下文章

使用为其他服务返回的 JWT 时,Cloud Run 服务请求总是失败并返回 401。相同的请求适用于为最终用户返回的 JWT

频繁的GET请求停止实际处理HTTP处理程序/离开返回相同的值

发布请求总是在 JMeter 中返回错误

使用 Guzzle 发布表单数据总是返回 404

Cassandra 并不总是在单个数据中心返回相同查询的预期数据,设置 5 个副本

WebApi Post 方法总是返回“请求的资源不支持 http 方法 'GET'。”状态:405 方法不允许