2016-07-25 6 views
-1

Ich habe eine Klasse namens „EntityType“, die eine Zeichenfolge „name“ hat und ich NSUserDefaults verwende es zu speichern, so habe ich versucht, dies:Objective C - Speichern einer Variable in NSUserDefaults

if (button.selected) 
{ 
    [button setSelected:YES]; 
    [[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"]; 
} 

Ich möchte Zugang die Variable aus einer anderen Klasse und speichern Sie sie in NSUserDefaults

+0

Warum speichern Sie den ausgewählten Status einer Schaltfläche in 'NSUserDefaults'? – Droppy

+0

weil ich einen Zustand habe, der von der gedrückten Taste abhängt – aboodmanna

+0

Sie verwenden also 'NSUserDefaults', um Informationen zwischen verschiedenen Teilen Ihrer App weiterzuleiten? – Droppy

Antwort

0

Sie haben Synchronisierungsanruf verpasst. Bewerben Sie sich, um es zu speichern.

if (button.selected) 
{ 
    [button setSelected:YES]; 
    [[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithBool:YES] forKey:@"buttonSelected"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

} 

es später wieder

NSNumber* savedValue = [[NSUserDefaults standardUserDefaults] 
    objectForKey:@"buttonSelected"]; 

Dies ist, wenn Sie den Wert speichern möchten. Wenn Sie Ihr benutzerdefiniertes Objekt Blick auf diesen Link How to store custom objects in NSUserDefaults

+0

wo sollte ich die Zeichenfolge "Name", die eine Eigenschaft in meiner EntityType-Klasse ist? – aboodmanna

+0

Sie brauchen die Synchronisierung nicht, dies erzwingt nur das Schreiben von Benutzer-Standardeinstellungen in die Datei, was ohnehin regelmäßig passiert. Sie können Standardwerte im Speicher lesen und schreiben, ohne in die Datei zu schreiben. –

+0

Ich bekomme es immer noch nicht, wo sollte ich den Wert (nicht den Schlüssel) der Zeichenfolge "Name", die eine Eigenschaft in meiner EntityType-Klasse ist? – aboodmanna

0

Sie erhalten NSNumber Objekt speichern möchten, wie,

NSNumber *num = [[NSUserDefaults standardUserDefaults] objectForKey:@"buttonSelected"]; 

von überall in der App.

+0

Ich muss die Zeichenfolge "name" speichern, die eine Eigenschaft innerhalb der EntityType-Klasse ist – aboodmanna

0

Auf Ihrer EntityType Klasse implementieren, um die folgenden zwei Verfahren zur Codierung und Decodierung (etwas zu Ihrer eigenen Objekt):

- (void)encodeWithCoder:(NSCoder *)encoder { 
    //Encode properties, other class variables, etc 
    [encoder encodeObject:self.name forKey:@"name"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder { 
    if((self = [super init])) { 
     //decode properties, other class vars 
     self.name = [decoder decodeObjectForKey:@"name"]; 
    } 
    return self; 
} 

Lesen und Schreiben von NSUserDefaults:

- (void)saveCustomObject:(MyObject *)object key:(NSString *)key { 
    NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:encodedObject forKey:key]; 
    [defaults synchronize]; 

} 

- (MyObject *)loadCustomObjectWithKey:(NSString *)key { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSData *encodedObject = [defaults objectForKey:key]; 
    MyObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject]; 
    return object; 
} 

-Code entlehnt : save class in NSUserDefaults