2

単純なMonoTouchiPadアプリケーションで次のコードを使用します。

        if (NSUserDefaults.StandardUserDefaults.StringForKey("spid") == null) 
        {
            NSUserDefaults.StandardUserDefaults.SetString ("spid", "myName");
            NSUserDefaults.StandardUserDefaults.SetString ("spdomain", "myDomain");
            NSUserDefaults.StandardUserDefaults.SetString ("sppwd", "myPassword");
            NSUserDefaults.StandardUserDefaults.Synchronize();
        }

        WebClient wc = new WebClient();
        wc.Credentials = new NetworkCredential(NSUserDefaults.StandardUserDefaults.StringForKey("spid"), 
                                               NSUserDefaults.StandardUserDefaults.StringForKey("sppwd"), 
                                               NSUserDefaults.StandardUserDefaults.StringForKey("spdomain"));

(今のところ、適切なビューが構築されるまで)目的は、plistファイルに保存されるデフォルトの資格情報を提供することです(後で、セキュリティを強化するためにKeyChainに移動されます)。ただし、StringForKey( "spid")などの呼び出しは、"myName"ではなくnullを返します。

Synchronize()を呼び出した後、デフォルト値が保持されないのはなぜですか?各SetString()の後にSynchronize()呼び出しを追加しても、問題は解決しませんでした。

4

1 に答える 1

8

最初のパラメーターSetStringを置くAppleAPI(および.NET開発者にとってはかなり混乱する慣習)に従うためのパラメーターは、と2番目のパラメーターを名前として持ちます。

したがって、次のように書く必要があります。

        NSUserDefaults.StandardUserDefaults.SetString ("myName", "spid");
        NSUserDefaults.StandardUserDefaults.SetString ("myDomain", "spdomain");
        NSUserDefaults.StandardUserDefaults.SetString ("myPassword", "sppwd");
        NSUserDefaults.StandardUserDefaults.Synchronize();

正しい行動を取るために。

于 2012-09-13T22:04:04.090 に答える