2015-06-11 9 views
5

W tej chwili zamierzamy opracować aplikację na iOS, która pokazuje listę produktów, które użytkownik może przeglądać w widoku listy z powiązanym małym plikiem PDF, i chcemy wykorzystać funkcję Parse do przechowywania danych, ponieważ możemy łatwo zalogować się do analizy i zaktualizować informacje o produkcie.Odświeżanie parsowania Lokalne dane Datastore Tylko do odczytu

Jestem obecnie zmaga się z dokumentacją Parse idealnie gdy aplikacja uruchamia chcemy kwerendy PFObject i uzyskać wszystkie wiersze w naszej klasie przechowywać je lokalnie przy użyciu

[PFObject pinAllInBackground:objects]; 

Nasza aplikacja będzie również potrzeba aby sprawdzić i odświeżyć ten magazyn danych w przyszłych wersjach, aby upewnić się, że najnowsze informacje o produkcie są dostępne.

Gdy użytkownik przegląda listę produktów, których poszukujemy, wysyła zapytanie do Lokalnego Datastore, aby pokazać dane, aby aplikacja w pełni działała w trybie offline.

Co walczę o to, jak oczyścić lub odświeżyć lokalnej pamięci podręcznej na użytkowników ponowne uruchomienie nie będzie robić żadnych zmian do niniejszego danych lokalnych i myślałem o użyciu

[PFObject unpinAllInBackground:objects]; 

Ale kiedy robimy po tym następuje zapytanie o przypięcie całego lokalnego Datastore'a.

Dzięki Aaron

Odpowiedz

3

udało mi się rozwiązać ten problem się z następujących, to teraz działa w wątku tła i wszystkie obiekty klasy pierwszej odpiąć za pobieranie i następnie ponownie przypinanie wszystkie obiekty.

- (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

chciałbym uczynić @ Kod trochę MonkeyBlue jest mniejszy.

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

Szpilka; metoda automatycznie wykonaj synchronizację, aby nie martwić się duplikowaniem obiektów. To jest fajna cecha parsowania.

Istnieją różne wersje -pin; dostępne są metody, które mogą być przydatne.

//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

Dzięki za które pierwotnie Próbowałem właśnie działa metodę pinAllObjects jednak co znalazłem było to, że jeśli już to zrobione na iOS, a następnie udał się do analizowania i usunięte rekord i dodano nowe, następnym razem Uruchomiłem kod PIN, aby pojawił się nowy rekord, ale także stary rekord na urządzeniu. – MonkeyBlue