2

以前に何度も尋ねられた質問だと誰かが言う前に、私は約20の異なる答えを調べ、見つけたすべてを試しました. それにもかかわらず、私は約 5 日前に目的 c を開始しただけなので、おそらくいくつかの本当に簡単な解決策があります。

NSUserDefaults は、さまざまな方法で呼び出されているにもかかわらず、デフォルト プロパティ リストから配列をロードしないようです。先に進む前に、配列を読み取るためのコードを次に示します。

      fishArrayMutable = [[NSMutableArray alloc] initWithArray:(NSArray*)[defaults objectForKey:@"fishArray"] copyItems:TRUE];

     if (fishArrayMutable == nil)
     {
       fishArrayMutable =  [[NSMutableArray alloc] init];
       UIAlertView *alert = [[UIAlertView alloc] init];
       [alert setTitle:@"fishArray = nil"];
       [alert addButtonWithTitle:@"Ok"];
       [alert show];
       [alert release];
     }

そして、配列を書き込むための私のコードは次のとおりです。

[defaults setObject:fishArrayMutable forKey:@"fishArray"];

[defaults synchronize];

これは現在、非常に苛立たしい問題になり始めており、問題を切り分ける方法について調べた結果、読み取り部分にあるという結論に達しました。Mutable 配列は、ヘッダー ファイルで宣言されています。助けてください、これは約6時間私を悩ませています...

4

2 に答える 2

3

エラーは次のいずれかであると思われます。

  1. defaults初期化されていません。
  2. 読み取り前に userDefaults が設定されていない
  3. userDefaults は読み取り前に上書きされます。

すべてのステップを分割し、各ステップの前後にテストを記述します。

1)NSLog fishArrayMutable配列の内容を検証するために書き込まれる場所。2)デフォルトへの
書き込み直後に、ユーザーのデフォルト。例:fishArrayMutableNSLog

NSLog(@"Before writing fishArray: %@", fishArrayMutable);
[defaults setObject:fishArrayMutable forKey:@"fishArray"];
NSLog(@"After writing fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]);

NSLogステートメントは、それらを自己完結型に保つことを使用しないことに注意してください。defaults

read を括弧で囲んで同様NSLogのステートメントを実行します (そして read を 2 つのステートメントにします)。

NSLog(@"Before reading fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]);
NSArray *fishArray = [defaults objectForKey:@"fishArray"];
NSLog(@"After reading fishArray: %@", fishArray);
fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE];
NSLog(@"After creating fishArrayMutable: %@", fishArrayMutable);

そうすれば、問題はかなり明白になるはずです。

注: 配列アイテム自体はNSUserDefaults代わりに: のために不変になるため
fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE];
、単に使用できるはずですmutableCopy:
fishArrayMutable = [fishArray mutableCopy];

于 2012-04-13T11:03:32.173 に答える
1

このリンクmutableArrayValueForKeyをチェックしてみてください

次のように使用します。

fishArrayMutable = [[NSMutableArray alloc] initWithArray:[defaults mutableArrayValueForKey:@"fishArray"]];

わたしにはできる

編集

書き込み:

[defaults setObject:fishArrayMutable forKey:@"fishArray"];
[defaults synchronize];

ロード:

NSMutableArray *array = [defaults mutableArrayValueForKey:@"fishArray"];
于 2012-04-13T11:17:50.860 に答える