我正在使用核心数据开发一个iOS应用程序。我正在使用Rest工具包连接Web服务,在休息工具包的帮助下,我将同步来自Web服务的数据并存储在我的本地核心数据库中。它是对我工作正常。当我将调用获取请求时,数据正在变得正确。但是过了一段时间我想从Web服务获得最新的更新数据,如果我再次同步,最新的数据正在我的数据库中正确获取和替换。
但是,如果我尝试获取最新数据,则获取请求将返回保存在数据库中的第一个数据。但是,如果我重新启动我的应用程序,获取请求将返回更新的数据。实际问题是什么。我是iOS的新手,所以我不明白这个问题。我将如何解决这个问题。
答案 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
}