Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS+;Parse.com:kPFCachePolicyCacheThenNetwork,检索数据两次_Iphone_Ios_Objective C_Caching_Parse Platform - Fatal编程技术网

Iphone iOS+;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

我已经使用Parse.com

我想先从缓存检索数据&然后从网络

为此,我使用了kPFCachePolicyCacheThenNetwork缓存策略,这是我所需要的

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]);
     }
   }];
}