2017-11-20 10 views
0

これはよくよく尋ねられる質問で、おそらくStackoverflow全体で最も議論の的になるものです。しかし、私は今、運のない約1週間の答えを探しています。ここで別のViewControllerからデータを取得する

は、私が何をしたいのか..です

私は2つのViewControllersを持っmainVCとsettingsVCそれらを呼び出すことができます。

私の設定では、ユーザーが毎時給料をテキストフィールドに入力してからUserDefaultsを使用して保存できる機能があります。これは私がmainVCでアクセスしたいデータです。

しかし、彼らはお互いに接続しておらず(セグのバインドもせず、そうしたくない)、私のデータを保存するときにmainVCをインスタンス化したくありません。

さらに、グローバル変数を使用したくありません。では、これを行う最善の方法は何ですか?

結論として、グローバル変数とセグを使わずに私の設定のVVCからmainVCのデータを取得したいと考えています。

+0

を使用する必要がありますand NotificationCenter ' –

+1

いいえ、Stackoverflow全体で*最も議論されたものはSwiftに関連しています*予期せぬ発見' nil' ... * ;-) – vadian

+0

UserDefaultsアプリケーション全体に設定されます。 ViewControllerごとではありません。したがって、デフォルト値に保存した場合は、給与が2倍の場合、別のViewControllerでUserDefaults.standard.double(forKey:<#T##String#>)によってアクセスできます。 –

答えて

-2

なぜユーザーのデフォルトからデータを取得しないのですか?それはデータが保存され、普遍的に利用可能な場所です。お使いの設定で

+2

Userdefaultsは永続性やデータの受け渡しを目的としたものではありません。 – vikingosegundo

+0

ユニットが設定されていないか、デフォルト賃金がデフォルトでない限り。もう1つのvcは設定vcとして記述され、ユーザーのデフォルト値はそのような値を格納する場所であり、それを取得します。Userdefaultsは値をキャッシュするため、ファイルは毎回開かれません。 icloudにバックアップするようにユーザーのデフォルトを構成し、すべてのユーザーデバイスにデータを保持することもできます。大量のデータを格納することを目的としたものではなく、コアデータのようなものを置き換えるものではなく、ユーザー定義のデータが永続化されていない場合、iCloudに格納するデータの量に制限があります。 –

+1

VC AがUserDefautsに何かを書いているとします。 VC Bがそれにアクセスして表示します。今、ユーザーはVC B.を離れます。今はどうなりますか?正確に。何もない。また、AからBに渡したデータはメモリに残ります。そのため、データを渡すことはできません。これが問題の範囲です。物事を渡すためだけにあらゆる種類の執拗さを打つことは、狂って、狂って、過度のものです。 – vikingosegundo

-1

のViewController:あなたのメインのViewControllerで

UserDefaults.standard.set(value: Double, forKey: "salary") 

、あなたがそこに行く時はいつでも。あなたのviewDidLoad内

UserDefaults.standard.double(forKey: "salary") 

UserDefaultsはビューコントローラごとではなく、アプリケーション全体です。だからこれが最善のことです。

+0

ありがとうございました! これは、これがデータを取得するための良い方法であるかどうか、またはグローバル変数の使用に似ているかどうかについて議論していますか? –

+2

Userdefaultsは永続性やデータの受け渡しを目的としたものではありません。 – vikingosegundo

+0

「これは良い方法であるかどうかについて私は議論している」これは文字通り最悪の解決策である。 UserDefaultsは...ユーザーのデフォルトを意図しています!永続的な設定、環境設定、そのようなもの。その内容はディスクに書き込まれます。それを使ってメモリ内にあるオブジェクト間でデータを渡すのは完全なナンセンスです。 – Moritz

0

viewContoller間でデータを渡すには、インスタンス変数、プロトコル、または通知を使用する必要があります。

-2

NSUserDefaultsにデータを保存しています。したがって、データの保存と検索を心配する機会はありません。

は価値保存するには

NSString *valueIWantToSet = @"valueToSave" 
[[NSUserDefaults standardUserDefaults] valueIWantToSet forKey:@"saveKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

この値NSUserDefaultsに値を保存しない場合には

NSString *savedValue = [[NSUserDefaults standardUserDefaults] 
stringForKey:@"saveKey"]; 

を取得するには、あなたがdelegate` `を使用してデータにアクセスすることができますNotification

+1

真剣に:ユーザーのデフォルトを使用して物事を渡さないでください。 – vikingosegundo

+0

私は答えたとき、彼はNSUserDefaultsにデータを保存していると言いました。今私は質問が編集されて参照してください。 –

+0

タグのみが変更されました。タイトルと本文は変更されません。 – vikingosegundo

関連する問題