2016-06-15 30 views
13

Ich habe einen Schalter namens Soundswitch, ich den Zustand der Schaltfläche speichere einen Benutzerstandard als solche mit:Swift - Wie Anfangswert setzen für NSUserDefaults

@IBAction func soundsChanged(sender: AnyObject) { 
     if soundSwitch.on{ 
      defaults.setBool(true, forKey: "SoundActive") 
      print("Sound ON") 
     }else{ 
      defaults.setBool(false, forKey: "SoundActive") 
      print("Sound OFF") 
     } 
    } 

Derzeit ist die tatsächlichen Ausfälle Wert ist zunächst falsch, wenn Der Benutzer startet die Anwendung zuerst.

Wie implementiere ich die Standardwerte als true, wenn der Benutzer die App zum ersten Mal startet und sie noch nicht konfiguriert wurden.

Ich habe Methoden in Objective-C gesehen, aber nichts in Swift. Von dem, was ich gesehen habe, können Sie es in der App delegieren einige wie, oder in einer PLIST-Datei. Wie mache ich beides?

+0

In Ihrem AppDelegate können Sie überprüfen, ob der WertForKey null ist. Wenn es null ist, kannst du es auf boolean true setzen – Dominic

+0

siehe: http://iosdevcenters.blogspot.com/2016/05/save-data-using-nsuserdefaults-in-swift.html –

Antwort

3

Es gibt nichts, swift oder App Delegate spezifisch.

Die anfänglichen Standardeinstellungen werden durch Aufrufen von registerDefaults: auf der standardUserDefaults Instanz festgelegt.

Sie können diesen Anruf mehrmals tätigen und ich würde empfehlen, dass Sie dies nicht im App-Delegaten tun, sondern entsprechende Details zu geeigneten Zeiten in der App registrieren, wenn Sie also einen View-Controller/ein Subsystem verwenden Bestimmte Standardwerte registrieren dann die Standardwerte als Teil der Initialisierung, wenn dieser Code verwendet wird.

Nur wenn Sie etwas haben, das von mehreren verschiedenen Teilen des Codes verwendet wird, sollten Sie dies im App-Delegaten in Betracht ziehen, und nur dann, wenn Sie keinen anderen geeigneten Controller dafür haben.

+0

Warum würdest du es nicht machen? der App-Delegierte? – Daniel

+1

, weil der App-Delegat für einen bestimmten Zweck da ist, und willkürliche Benutzer Standardeinstellungen Registrierung ist nicht Teil dieses Zweck @simpleBob - als Delegierter der Anwendung und Handhabung der Anwendungsebene Ereignisse ist, sonst nichts – Wain

+0

Aber Benutzer Standardeinstellungen Registrierung sollte vor getan werden alles andere, deshalb wäre 'didFinishLaunchingWithOptions' ein ziemlich naheliegender Ort und genau dort, wo es in den meisten Projekten zu finden ist. Außerdem denke ich, dass es besser ist, alle Standardeinstellungen an einem Ort zu haben, als mehrere 'registerDefaults' im gesamten Projekt zu haben. – Daniel

0

Wenn Sie wirklich es auf diese Weise tun wollen, setzen Sie diese in der AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let defaults = NSUserDefaults.standardUserDefaults() 
    if defaults.valueForKey("SoundActive") == nil { 
     defaults.setBool(true, forKey: "SoundActive") 
    } 

Wenn es nur in dem einem Viewcontroller verwendet wird, sollten Sie stattdessen den Code in der viewDidLoad Methode setzen!

+0

Ich denke nicht, dass es ein guter Weg ist, denn jedes Mal, wenn ich die App starte, würde es diese Codes ausführen. Aber in der Tat wird es nur zum ersten Mal benötigt. –

+0

OK, Sie bearbeiten es. Aber ich denke, der beste Ort ist, wenn Sie den Wert von "SoundActive" verwenden, wenn nicht wahr. –

1
func lastStatus() -> Bool { 
    let defaultValue = true 
    if let value = default.valueForKey("SoundActive") { 
     // then use it 
     return value as? Bool ?? defaultValue 
    } else { 
     // oh, no value? 
     return defaultValue 
    } 
} 

Ich denke, das ist der beste Weg, es zu verwenden. Auch register(defaults:) wird helfen, aber in der Dokumentation schlägt Apple vor, es als fallback, wie Trennung Situation no value und default value zu verwenden. Verlassen Sie sich auf Ihre Bedürfnisse.

0

Setzen Sie dies in Ihrem "DidFinishLaunchingWithOptions" in Ihrem AppDelegate.

if defaults.valueForKey("launchedAlready") == true { 
     print("Not first launch.") 
    } 
    else { 
     defaults.setValue(true, forKey: "launchedAlready") 
     defaults.setBool(true, forKey: "SoundActive") 
     print("Sound ON") 
    } 
5

Mit "registerDefaults" Sie Standardwert von NSUserDefaults

let userDefaultsDefaults = [ 
      "SoundActive" : true 
     ] 

NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults) 

Hinweis festlegen können: schreiben diese in didFinishLaunchingWithOptions, so Wertvorgabe gesetzt.

schreiben Code unten, wo Sie

let onoroff = NSUserDefaults.standardUserDefaults().objectForKey("SoundActive") as! Bool! 

if (onoroff != nil && onoroff == false) 
{ 
    self.checkForAgreement() 
} 
32

Swift 3 Syntax Beispiel

Registrieren Sie ein boolean Standardwert überprüfen möchten:

UserDefaults.standard.register(defaults: ["SoundActive" : true]) 

Und bekommen der Wert:

UserDefaults.standard.bool(forKey: "SoundActive") 

Nebenbei bemerkt: Auch wenn der obige Code wahr zurück, beachten Sie, dass der Wert tatsächlich nicht auf die Platte geschrieben, bis Sie setzen es:

UserDefaults.standard.set(true, forKey: "SoundActive") 
-2

Set und aktiviert werden Sound.

var isSoundActivated: Bool { 
     get { 
      return defaults.bool(forKey: "SoundActive") 
     } 
     set { 
      defaults.set(newValue, forKey: "SoundActive") 
      defaults.synchronize() 
     } 
    } 

Set Bool Wert von

isSoundActivated = true 

Check Bool Wert von

if isSoundActivated { 
    print("sound activated") 
} 
2

Fügen Sie diese auf Ihre didFinishLaunchingWithOptions Methode aus dem AppDelegate. Wie einige andere darauf hingewiesen haben, versuche nicht zu missbrauchen, indem du alles in diese Methode legst.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    /// Here you can give default values to your UserDefault keys 
    UserDefaults.standard.register(defaults: [ 
     "SoundActive": true, 
     "someOtherKey": "Some Message" 
     ]) 
}