Come sottoclasse Uibutton per consentire di copiare e codificare per l'archiviazione?
-
12-11-2019 - |
Domanda
Ho un'app in cui devo tenere traccia dell'ultimo pulsante premuto in ogni momento. Quindi ho implementato questo metodo:
-(void) lastButtonPressed: (id)sender
{
lastButtonPressed = (UIButton *)sender;
}
Quindi quando viene premuto un pulsante, chiamo:
[self lastButtonPressed = xButton];
Funziona perfettamente. Ma ora sto lavorando per archiviare tutti gli oggetti nella mia app quando la vista scompare o si chiude per poi inarcheggiare e Uibutton non è conforme a NSCOPYING o NSCODING. Ho letto che posso sottoclasse Uibutton e definire i metodi ma sono bloccato lì.
Quindi, quando la mia app si chiude o la vista scompare, voglio salvare l'ultimo abbondante.
Ho creato una nuova classe chiamata Bidpersistence per tenere i miei dati archiviati. Nel controller di visualizzazione della mia app ho un metodo Savedata in cui salvo i miei dati. Ricevo un errore sull'ultima riga mostrata di seguito perché Uibutton non è conforme.
BIDPersistence *persistence = [[BIDPersistence alloc] init];
persistence.field1 = [NSNumber numberWithDouble:double1];
persistence.field2 = [NSNumber numberWithDouble:double2];
persistence.field3 = display.text;
persistence.field4 = tapeDisplay.text;
persistence.field5 = [NSNumber numberWithBool:continueTape];
persistence.field6 = [NSNumber numberWithBool:newDouble];
persistence.field7 = lastButtonPressed;
Qualsiasi aiuto apprezzato.
Soluzione
Sembra che non devi salvare il pulsante reale, sappi solo quale è stato premuto per ultimo. Per questo è possibile utilizzare NSUSERDEFAULS, il che è utile per salvare piccoli bocconcini senza dover impostare dati core o simili. Quello che consiglierei è di dare a ciascun pulsante un tag unico (in Interface Builder, solo un int), quindi farlo:
[[NSUserDefaults standardUserDefaults] setInt:[lastButton tag] forKey:@"LastButtonPressed"];
Successivamente è possibile recuperare il pulsante utilizzando viewWithTag:
.
Altri suggerimenti
Non puoi davvero sottoclasse UIButton
. Non è una singola classe ma, come si suol dire, un cluster di classe che UIKit
Seleziona in base a UIButton
'S + (id)buttonWithType:(UIButtonType)buttonType
.
Detto questo, (appare) è conforme a NSCoding
(solo leggendo i documenti; non so come il NSCoding
roba funziona.)