Iphone iOS+;Parse.com:kPFCachePolicyCacheThenNetwork,检索数据两次
我已经使用Parse.com 我想先从缓存检索数据&然后从网络 为此,我使用了kPFCachePolicyCacheThenNetwork缓存策略,这是我所需要的Iphone iOS+;Parse.com:kPFCachePolicyCacheThenNetwork,检索数据两次,iphone,ios,objective-c,caching,parse-platform,Iphone,Ios,Objective C,Caching,Parse Platform,我已经使用Parse.com 我想先从缓存检索数据&然后从网络 为此,我使用了kPFCachePolicyCacheThenNetwork缓存策略,这是我所需要的 PFQuery *employesquery = [PFQuery queryWithClassName:@"employesTable"]; [employesquery whereKey:@"UserID" equalTo:[PFUser currentUser]]; [employesquery includeK
PFQuery *employesquery = [PFQuery queryWithClassName:@"employesTable"];
[employesquery whereKey:@"UserID" equalTo:[PFUser currentUser]];
[employesquery includeKey:@"empID"];
[employesquery includeKey:@"empID.user"];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
//APPLIES CACHE... ********
employesquery.cachePolicy = kPFCachePolicyCacheThenNetwork;
[employesquery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
[hud hide:YES];
NSMutableArray *empData = [[NSMutableArray alloc] init];
for (PFObject *object in objects)
{
//Getting Data For Item
PFObject *employeeObject = [object objectForKey:@"empID"];
[empData addObject:employeeObject];
}
[self fetchEmployeeData:empData];
}];
但使用此方法,每个数据检索两次可重复的数据
如何避免此重复数据,
一旦数据从网络中获取,先前显示的数据(使用缓存)将被清除/隐藏
我尝试了[PFQuery clearlallcachedresults]代码>
已清除所有缓存,以便下次迭代时缓存中没有数据。使用kPFCachePolicyCacheThenNetwork
作为缓存策略时,您的回调始终会触发两次。这是因为策略是使用缓存,然后转到网络,而不是专门使用缓存
解决方案是跟踪块被调用的次数,以便确定是从网络获取缓存结果还是新结果。Parse have.必须清除数据数组,该数组用于在块findobjectsinbackgroundithblock:^(NSArray*objects,NSError*error)中从Parse查询存储对象
-(无效)刷新数据
{
PFUser*currentUser=[PFUser currentUser];
NSPredicate*谓词=[NSPredicate谓词WithFormat:[NSString stringWithFormat:@“%@=”%@“或%@=”%@“,
kMessageUserSendIdKey,currentUser.objectId,
kMessageUserReceiveIdKey,currentUser.objectId]];
PFQuery*query=[PFQuery queryWithClassName:kMessageClassKey谓词:谓词];
[查询添加下降顺序:kMessageTimeCreatedKey];
[查询includeKey:kMessageUserSendKey];
[查询includeKey:kMessageUserReceiveKey];
[查询setCachePolicy:kPFCachePolicyCacheThenNetwork];
[查询findObjectsInBackgroundWithBlock:^(NSArray*对象,NSError*错误){
如果(!错误){
//TODO:清除数据数组
self.messagesDataArray=[NSMutableArray new];
如果(objects.count>0){
[self.messagesDataArray addObject:objects[0]];
for(int i=1;i
- (void)refreshData
{
PFUser *currentUser = [PFUser currentUser];
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ = '%@' OR %@ = '%@'",
kMessageUserSendIdKey, currentUser.objectId,
kMessageUserReceiveIdKey, currentUser.objectId]];
PFQuery *query = [PFQuery queryWithClassName:kMessageClassKey predicate:predicate];
[query addDescendingOrder:kMessageTimeCreatedKey];
[query includeKey:kMessageUserSendKey];
[query includeKey:kMessageUserReceiveKey];
[query setCachePolicy:kPFCachePolicyCacheThenNetwork];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
// TODO: Clear the data array
self.messagesDataArray = [NSMutableArray new];
if (objects.count > 0) {
[self.messagesDataArray addObject:objects[0]];
for (int i = 1; i < objects.count; i++) {
PFObject *messageChat = [objects objectAtIndex:i];
if (![self isExistWithMessageChat:messageChat]){
[self.messagesDataArray addObject:messageChat];
}
}
[self.tableView reloadData];
}
}
else {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}