2015-06-11 3 views
5

В настоящее время мы разрабатываем приложение iOS, которое показывает список продуктов для просмотра пользователем в виде списка с помощью небольшого PDF-файла, и мы надеемся использовать Parse для хранения поскольку мы можем легко войти в Parse и обновить информацию о продукте.Обновление локального хранилища данных только для чтения

Я в настоящее время борется с документацией Разбор идеально, когда приложение запускает мы хотим, чтобы запросить PFObject и получить все строки в нашем классе, чтобы хранить их локально, используя

[PFObject pinAllInBackground:objects]; 

Наше приложение также нужно будет для проверки и обновления этого хранилища данных в будущих запусках, чтобы обеспечить доступность последней информации о продукте.

Когда пользователь просматривает список продуктов, мы запрашиваем локальный хранилище данных, чтобы показать данные, чтобы приложение полностью работало в автономном режиме.

То, что я борюсь с как очистить или обновить локальный кэш на пользователей повторного запуска не будет делать какие-либо изменения в этом локальные данные, и я думал об использовании

[PFObject unpinAllInBackground:objects]; 

Но когда мы делаем после чего запрос на привязку всего локального хранилища данных пуст.

Спасибо Аарон

ответ

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

Я хотел бы сделать код @ 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; 
+0

Спасибо за это изначально я стараюсь просто работаю метод pinAllObjects однако, что я нашел, что если я уже сделал это на прошивке, а затем пошел разбирать и удалять записи и добавила новую, в следующий раз Я запустил пин-код новой записи, но также и старую запись на устройстве. – MonkeyBlue

Смежные вопросы