0

NSUserDefaultsを使用して配列を保存しようとしています。私はそれを私のアプリの他の部分で動作させるようになりました、そして私はそれが今動作しない理由を理解できないようです。userDefaults-arrayに(null)を追加しているようですが、追加しようとしているもの([mainDelegate.globalValdaFragor objectAtIndex:i])をNSLogすると、入力したい値が表示されます。

問題は、「felPaFragor」配列に何も追加できないことです。NSLogを実行しようとすると(null)になり、別の「ランダム」配列で試行すると機能するように見えます。

RPAppDelegate *mainDelegate = (RPAppDelegate *)[[UIApplication sharedApplication]delegate];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSMutableArray *felPaFragor = [[NSMutableArray alloc] init];
felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];

[felPaFragor addObject:[mainDelegate.globalValdaFragor objectAtIndex:i]];

[defaults setObject:felPaFragor forKey:@"felFragorArray"];

どんな助けでも大歓迎です。

編集:私はそれを理解したと思います。空の配列のmutableCopyを作成しようとしていたようで、その結果、「felPaFragor」配列がバグになりました。これを追加すると機能しました。

felPaFragor = [[NSMutableArray alloc] init];
if ([[defaults valueForKey:@"felFragorArray"] objectAtIndex:0] != NULL) {
    felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];
}
4

2 に答える 2

1

これを実行した後の場合:

NSMutableArray *felPaFragor = [[NSMutableArray alloc] init];
felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];

あなたfelPaFragorはですnil、そしてそれ[defaults valueForKey:@"felFragorArray"]は戻っている可能性が高いnilです。

そのため、キーに問題があるか、そのキーに関連付けられているオブジェクトがNSUserDefaultsまだ保存されていない可能性があります。

于 2013-01-14T16:27:14.597 に答える
1

最初に:ARCを使用していますか?

そうでない場合は、ここでメモリリークが発生します。

NSMutableArray *felPaFragor = [[NSMutableArray alloc] init];
felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];

最初のようなものは、リリースされたことがない(そして、使用されたことがない:ARCであるかどうかにかかわらず、その行はまったく必要ありません)NSMutableArrayを作成して保持します。

使用するだけです:

NSMutableArray *felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];

とは言っても、Sergioの答えは正しいかもしれません...あなたがこの時点でそれを呼び出すとき、あなたのvalueForKey:@"felFragorArray"は決して設定されていないかもしれません

于 2013-01-14T16:36:07.067 に答える