iOS + Parse.com:kPFCachePolicyCacheThenNetwork,检索数据两次

iOS*_*dev 3 iphone caching objective-c ios parse-platform

我使用Parse.com构建了一个iOS应用程序

我想要从数据高速缓存最初与来自网络,然后

为此,我使用了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];

    }];
Run Code Online (Sandbox Code Playgroud)

但是使用这个每个数据检索两次,可重复的数据.

如何避免这种可重复的数据,

一旦数据从网络获得,先前显示的数据(使用缓存)将被清除/隐藏.

我试过了 [PFQuery clearAllCachedResults];

它被清除了所有缓存,因此下一次迭代的缓存中没有数据.

lxt*_*lxt 9

当使用kPFCachePolicyCacheThenNetwork您的缓存策略时,您的回调始终会被触发两次.这是因为策略是使用缓存然后转到网络,而不是专门使用缓存.

解决方案是跟踪块被调用的次数,这样您就可以确定是从网络获取缓存结果还是新结果.Parse 在这里更多相关信息.