刷新解析本地数据存储区只读

时间:2015-06-11 19:59:37

标签: ios objective-c caching parse-platform

我们目前正在开发一个iOS应用程序,它显示了一个产品列表供用户在列表视图中查看,并带有相关的小PDF文件,我们希望利用Parse存储数据,因为我们可以轻松登录解析并更新产品信息。

我目前正在努力解决Parse文档,当应用程序启动时我们希望它查询PFObject并获取我们类中的所有行以使用

在本地存储它们
[PFObject pinAllInBackground:objects];

我们的应用还需要在将来发布时检查并刷新此数据存储,以确保提供最新的产品信息。

当用户查看产品列表时,我们希望查询本地数据存储区以显示数据,以便应用程序完全脱机工作。

我正在努力的是如何在重新启动用户时清除或刷新本地缓存不会对此本地数据进行任何更改而我正在考虑使用

  [PFObject unpinAllInBackground:objects];

但是当我们这样做,然后查询以确定所有本地数据存储区为空时。

谢谢Aaron

2 个答案:

答案 0 :(得分:3)

我设法用以下方法解决了这个问题,它现在在后台线程中运行,首先取消所有类对象的取消,然后再取出并固定所有对象。

- (void)updateParseCacheForClass:(NSString *)className {

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{

        PFQuery *query = [PFQuery queryWithClassName:className];
        [query fromLocalDatastore];

        NSArray *objects = [query findObjects];
        if (objects) {
            [PFObject unpinAll:objects];
        }

        PFQuery *query2 = [PFQuery queryWithClassName:className];
        NSArray *objects2 = [query2 findObjects];
        if (objects2) {
            [PFObject pinAll:objects2];
            NSLog(@"Successfully retrieved %lu records. for %@", (unsigned long)objects.count, className);
        }
    });
}

答案 1 :(得分:1)

我想让@ MonkeyBlue的代码变小一些。

- (void)updateParseCacheForClass:(NSString *)className {

    PFQuery *query = [PFQuery queryWithClassName:className];
    NSArray *objects = [query findObjects];
    [PFObject pinAllInBackground:objects block:^(BOOL succeeded, NSError *error) {
        if(succeeded) {
            NSLog(@"Successfully retrieved %lu records. for %@", (unsigned long)objects.count, className);
        } else if (error) {
            NSLog(@"Error");
        }
    }];
}    

-pin;方法会自动为您执行同步,因此您不必担心对象的重复。这是解析的一个很酷的功能。

有不同版本的-pin;可用的方法很有用。

//for pining single object
- (BOOL)pin
- (BOOL)pin:(NSError **)error;
- (BOOL)pinWithName:(NSString *)name;
- (BOOL)pinWithName:(NSString *)name error:(NSError **)error;
- (BFTask *)pinInBackground;
- (void)pinInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block;
- (BFTask *)pinInBackgroundWithName:(NSString *)name;
- (void)pinInBackgroundWithName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block;

//for pining array of objects
+ (BOOL)pinAll:(PF_NULLABLE NSArray *)objects;
+ (BOOL)pinAll:(PF_NULLABLE NSArray *)objects error:(NSError **)error;
+ (BOOL)pinAll:(PF_NULLABLE NSArray *)objects withName:(NSString *)name;
+ (BOOL)pinAll:(PF_NULLABLE NSArray *)objects withName:(NSString *)name error:(NSError **)error;
+ (BFTask *)pinAllInBackground:(PF_NULLABLE NSArray *)objects;
+ (void)pinAllInBackground:(PF_NULLABLE NSArray *)objects block:(PF_NULLABLE PFBooleanResultBlock)block;
+ (BFTask *)pinAllInBackground:(PF_NULLABLE NSArray *)objects withName:(NSString *)name;
+ (void)pinAllInBackground:(PF_NULLABLE NSArray *)objects withName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block;