2015-06-11 9 views
5

Attualmente stiamo cercando di sviluppare un'app per iOS che mostra un elenco di prodotti per un utente da visualizzare in una visualizzazione elenco con un file PDF piccolo associato e stiamo cercando di utilizzare Parse per archiviare il file dati in quanto possiamo facilmente accedere a Parse e aggiornare le informazioni sul prodotto.Aggiornamento di un file di dati locale di analisi di sola lettura

Sono attualmente alle prese con la documentazione Parse ideale quando l'applicazione lancia vogliamo che interrogare il PFObject e ottenere tutte le righe all'interno della nostra classe per memorizzare in locale utilizzando

[PFObject pinAllInBackground:objects]; 

La nostra applicazione sarebbe anche bisogno per controllare e aggiornare questo archivio dati nei lanci futuri per assicurarsi che siano disponibili le ultime informazioni sul prodotto.

Quando l'utente visualizza l'elenco di prodotti che stiamo cercando di interrogare il Datastore locale per mostrare i dati in modo che l'app funzioni completamente offline.

Quello che sto lottando con è come eliminare o aggiornare la cache locale sugli utenti di rilancio non saranno apportare alcuna modifica a questi dati locali e stavo pensando di usare

[PFObject unpinAllInBackground:objects]; 

Ma quando lo facciamo questo seguito da una query per bloccare tutto il Datastore locale è vuoto.

Grazie Aaron

risposta

3

sono riuscito a risolvere questo problema io stesso con la seguente, ora viene eseguito in un thread in background e tutti gli oggetti di classe prima di Sblocca seguito da recupero e pinning di nuovo tutti gli oggetti.

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

Mi piacerebbe rendere il codice di @ MonkeyBlue un po 'più piccolo.

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

The -pin; metodo esegui automaticamente la sincronizzazione per te in modo che non ti preoccupi della duplicazione degli oggetti. Questa è la caratteristica interessante del parse.

Ci sono diverse versioni di -pin; sono disponibili metodi che possono essere utili.

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

Grazie per quello originariamente ho provato solo in esecuzione il metodo pinAllObjects però quello che ho trovato era che se avevo già fatto presente su iOS e poi è andato per analizzare e cancellato un record e ha aggiunto uno nuovo, la prossima volta Ho eseguito il codice pin che comparirà il nuovo record ma anche il vecchio record sul dispositivo. – MonkeyBlue

Problemi correlati