4. NSUserDefaults (o qualsiasi altro archivio dati, Davvero)
Mi sono imbattuto nello stesso problema e ho optato per l'altra opzione più tradizionale di salvare le cose in un altro archivio dati (NSUserDefaults). Nel mio caso, stavo memorizzando l'ultima volta che un utente ha visualizzato un articolo e la memorizzazione di questi dati in NSUserDefaults sembrava appropriata.Ho fatto qualcosa di simile al seguente:
In primo luogo, definire una chiave unica per l'oggetto che si sta memorizzando (self
qui è l'oggetto del modello sta osservando e resa):
- (NSString *)lastViewedDateKey {
// Note each item gets a unique key with <className>_<itemId> guaranteeing us uniqueness
return [NSString stringWithFormat:@"%@_%ld", self.class.className, (long)self.itemId];
}
Poi, quando un utente visualizza la elemento, impostare la chiave:
- (void)setLastViewedToNow {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:[NSDate date] forKey:self.lastViewedDateKey];
[userDefaults synchronize];
}
Più tardi, lo uso come questo:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDate *createdOnDate = <passed in from elsewhere>;
NSDate *lastViewedDate = [userDefaults objectForKey:self.lastViewedDateKey];
if (!lastViewedDate || [createdOnDate compare:lastViewedDate] == NSOrderedDescending) {
...
}
Diversamente dalle soluzioni di cui sopra: 1. Non esiste la persistenza dei dati. 2. Questo crea un altro posto in cui è necessario definire le proprietà di un oggetto e probabilmente porterà ad errori se si dimentica di aggiornare questo elenco ogni volta che viene aggiunta una nuova proprietà. 3. Se si stanno eseguendo aggiornamenti batch di grandi dimensioni, tornare indietro attraverso ogni oggetto non è molto pratico e sicuramente causerà dolore lungo la strada.
Spero che questo dia a qualcuno un'altra opzione se ne ha bisogno.
Stai dicendo che non vuoi salvare 'preferito' in Realm? In tal caso, rimuovere 'dynamic' mentre le proprietà dinamiche vengono salvate in Realm. – Abhinav
sto dicendo che il 'preferito' non è memorizzato nel database remoto, quindi ogni volta che apri l'app e aggiunge nuovi oggetti e aggiorna esistenti in base alla chiave primaria' id' imposterà il valore preferito al valore predefinito ('false '). Posso evitare che si aggiorni al valore predefinito? –
Questo è strano. Avrei pensato che i metodi 'createOrUpdate' in Realm non avrebbero toccato le proprietà che non sono specificate nel dizionario. Puoi includere il codice di esempio in cui stai effettivamente salvando/aggiornando i dati dell'API su Realm? – TiM