2017-11-14 3 views
-1

ラベルに表示されたタプルを保存するためにuserdefualtsを使用しようとしています。現在、私のコードはuserdefulatsを使用しています。 a、2、a、3が入力された場合。ラベルには、a、2a、2、a、3が表示されます。ラベルは新しいエントリを追加するだけです。保存したものを上書きするには、userdefualtが必要です。したがって、a、2 a、3のみを表示する必要があります。ボタンを押すたびにユーザー定義をリセットします(swift4)

 @IBAction func submitText(_ sender: Any) { 
     if let domain = Bundle.main.bundleIdentifier { 
      UserDefaults.standard.removePersistentDomain(forName: domain) 
     } 

     llble.text = String(describing: result) + "\n" 
        UserDefaults.standard.set(llble.text, forKey: "name") 

     } 

    override func viewDidAppear(_ animated: Bool) { 
     let save : String? = UserDefaults.standard.object(forKey: "name") as? String 
     if let nameToDisplay = save { 
      llble.text = nameToDisplay 
     } 
    } 
+0

ユーザーのデフォルト値からすべての値を削除するか、キー "name"の値だけを削除しますか? –

答えて

-1

以下の方法をSwiftで使用できます。これにより、すべてのユーザーデフォルト値が削除され、削除されます。

UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!) 
UserDefaults.standard.synchronize() 
0

文字列を提供している結果変数のロジックをuserdefaultにチェックする必要があります。

1

スイフト4:

if let domain = Bundle.main.bundleIdentifier { 
    UserDefaults.standard.removePersistentDomain(forName: domain) 
} 

スウィフト3:

if let domain = NSBundle.mainBundle().bundleIdentifier { 
    NSUserDefaults.standardUserDefaults().removePersistentDomainForName(
domain) 
} 

のObjective-C:このメソッドを呼び出す

NSString *domain = [[NSBundle mainBundle] bundleIdentifier]; 
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName: domain]; 

は、デフォルトのドメイン名を渡すinit(suiteName:)持つオブジェクトユーザーを初期化と等価ですそれぞれのキーでremoveObject(forKey:)メソッドを呼び出します。

また、synchronize()は従来の方法であり、不要なので使用しないでください。

+0

ボタン操作またはviewdidでlet domain = Bundle.main.bundleIdentifier { UserDefaults.standard.removePersistentDomain(forName:domain) }と入力しますか?ありがとう。 –

+0

再利用できるようにするには、別のサービス/マネージャを作成する必要があります。もしそうでなければ、単に "func clearUserDefaults"のようなクラスのメソッドを作り、ボタンがタップされたときにそれを呼び出す(実際にはviewdidappearでuserdefaultsをクリアするべき理由は想像できません) –

+0

私はちょうど上記のコードを編集しましたが、以前のコードを追加します。 –

関連する問題