2016-06-15 25 views
13
için başlangıç ​​değerini nasıl ayarlanır

Ben soundSwitch adında bir anahtar, ben gibi bir kullanıcı varsayılan kullanarak düğmenin durumunu kaydetme am var: Şu anda fiili varsayılan değer zaman başlangıçta yanlıştırSwift - 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") 
     } 
    } 

Kullanıcı uygulamayı ilk başlatır.

Kullanıcı uygulamayı ilk kez başlatıyorsa ve henüz yapılandırılmamışsa, varsayılanların nasıl olacağını doğru olarak uygularım.

Objective-C'de yöntemler gördüm, ancak Swift'de hiçbir şey yok. Gördüğüm kadarıyla uygulamada bunu nasıl yapabilirsin, ya da bir plist dosyasında. Bunlardan birini nasıl yaparım?

+0

AppDelegate uygulamasında, valueForKey'nin boş olup olmadığını kontrol edebilirsiniz. Eğer null ise true olarak – Dominic

+0

no.lu dosyaya ayarlayabilirsiniz: http://iosdevcenters.blogspot.com/2016/05/save-data-using-nsuserdefaults-in-swift.html –

cevap

3

Belirli bir hız veya uygulama temsilcisi yok.

İlk varsayılanlar,örneğinde registerDefaults: numaralı telefonu arayarak ayarlanır.

Bu aramayı birden çok kez yapabilirsiniz ve uygulama delegesinde yapmamanızı öneririm, bunun yerine uygulamada uygun zamanlardaki uygun ayrıntıları kaydedin, böylece kullandığınız 1 denetim denetleyicisi/alt sisteminiz varsa belirli varsayılan değerler daha sonra, varsayılan değerleri, eğer bu kod ise, başlatma işleminin bir parçası olarak kaydeder.

Yalnızca uygulamanın birden çok farklı bölümünün kullandığı bir öğeye sahipseniz, bunu uygulama temsilcisinde gerçekleştirmeyi düşünürseniz ve bunu gerçekleştirmeniz için yalnızca uygun başka bir denetleyiciniz yoksa. Eğer gerçekten bu şekilde yapmak istiyorsanız

+0

Neden bunu yapmıyorsunuz? Uygulama temsilcisi mi? – Daniel

+1

app delegesi belirli bir amaç için var ve keyfi kullanıcı varsayılanları kaydı bu amacın bir parçası değildir @simpleBob - uygulama delege olmak ve uygulama seviyesi olaylarını işlemek, başka hiçbir şey değil – Wain

+0

Ama kullanıcı varsayılan kayıt daha önce yapılmalıdır başka bir şey, bu yüzden 'FinishLaunchingWithOptions' yerine oldukça açık bir yer olurdu ve çoğu projede bulunduğu yer budur. Ayrıca, tüm proje boyunca birden fazla "registerDefaults" sahip olmaktan ziyade tüm varsayılanların tek bir yerde olması daha iyi olur. – Daniel

0

, AppDelegate içinde koymak:

sadece bir viewcontroller kullanılıyorsa
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

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

yerine viewDidLoad yönteminde kod koyarak düşünün!

+0

Bunun iyi bir yol olduğunu düşünmüyorum, çünkü uygulamayı her başlattığımda, bu kodları çalıştıracaktı. Ama aslında, sadece ilk kez gerekli. –

+0

Tamam, düzenlersiniz. Ama bence en iyi yer "SoundActive" değerini kullandığınızda, o zaman doğru değilse. –

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

Bunu kullanmanın en iyi yolu olduğunu düşünüyorum. Ayrıca, register(defaults:) yardımcı olacaktır, ancak Apple'ın belgelerinde, no value ve default value durumlarının ayrılması gibi, fallback olarak kullanılmasını önerir. İhtiyacınıza göre.

0

Bunu, AppDelegate'inizdeki "didFinishLaunchingWithOptions" öğenize koyun. "RegisterDefaults" Eğer NSUserDefaults

let userDefaultsDefaults = [ 
      "SoundActive" : true 
     ] 

NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults) 

Not Varsayılan değer ayarlayabilirsiniz kullanma

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

: didFinishLaunchingWithOptions bu yazma, böylece varsayılan değer ayarlanır.Kontrol etmek istediğiniz kodunun altına

yazma

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

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

Swift 3 sözdizimi örneği

bir boolean varsayılan değeri Kayıt:

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

Ve için olsun değer:

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

Sidenote:

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

Seti ve ses aktive olsun: Yukarıdaki kod doğruysa dönecektir rağmen, o set kadar değeri aslında diske yazılır unutmayın.

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

tarafından

isSoundActivated = true 

onay bool değeri ile

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

Seti bool değeri AppDelegate adresinin didFinishLaunchingWithOptions yöntemine bu ekleyin. Bazılarının işaret ettiği gibi, her şeyi bu yönteme koyarak kötüye kullanmamaya çalışın.

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