0

私は iOS 開発に不慣れで、この問題を解決する方法を見つけることができませんでした:

ユーザーが情報を入力するビュー(文字列など)と、入力されたすべての文字列を含むテーブルビューがあるビュー(履歴ビューなど)の2つのビューを持つアプリがあります。

私が見つけようとしているのは、入力文字列を保存し、ユーザーが履歴に切り替えたら、それをテーブル ビュー データ ソースにロードする良い方法です。NSUserdefault を使用しようとしましたが、あまり成功しませんでした。データ構造などをめちゃくちゃにするだけです。

メイン ビュー (ユーザーが入力文字列を入力する場所) で行っていることは次のとおりです。

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];     
    NSMutableArray *arr1 = [[NSMutableArray alloc] init];
    arr1 = [defaults arrayForKey:@"historyNames"];

    [arr1 addObject:string];

    [defaults setObject:arr1 forKey:@"historyNames"];    

なんらかの理由で、arr1 を読み込んだところに警告が表示されましたが、正直なところ、とにかくうまくいくとは思えません。

これを修正して適切に機能させ、探しているものを達成する方法を誰かが提案できますか?

ありがとう。

4

2 に答える 2

7
[defaults arrayForKey:@"historyNames"];

NSUSerDefaults でそのキーの配列を初期化および保存したことがない場合は、nil を返します。

一度初期化して配列して設定すると (NSUserDefaults のデフォルト値を初期化する方法を調べてください)、適切な配列が返されます。

それからあなたはただすることができます

NSMutableArray *arr1  = [NSMutableArray arrayWithArray:[[defaults arrayForKey@"historyNames"]];

この配列に含まれる要素の数によっては、Core Data を使用したほうがよい場合があります。ユーザーデフォルトを使用することは、小さな設定などの場合にだけ、多くの/大きな値に対してあまり効率的ではありません.

于 2012-05-18T19:58:41.253 に答える
0

アプリケーションが起動したら、ユーザーの既定値を調べて、最後に使用したときの配列オブジェクトが既にあるかどうかを確認します。存在しない場合は、arr1 の alloc と init を呼び出します。(デフォルトからアクセスしている場合は、呼び出したくありません。)

NSMutableArray * arr1;
arr1 = (NSMutableArray *) [defaults objectForKey:@"historyNames"];
if (!arr1) {
    arr1 = [[NSMutableArray alloc] initWithCapacity:20];
}

メイン ビューで、入力文字列を追加し、デフォルトを保存します。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject: arr1 forKey: @"historyNames"];
[prefs synchronize];
于 2012-05-18T19:53:43.867 に答える