0

私はそのルートに辞書を含む配列であるplistを持っています。

私は自分のリコースからplistをNSMutableArrayとしてロードします。

[NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Filters" ofType:@"plist"]]

スタートアップ間で永続化する必要があるため、nsuserdefaultに保存します。

[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"filters"];

しかし、配列内の辞書は変更できないため、変更できません。どうすればそれらを可変にすることができますか?

4

2 に答える 2

5

「mutabilityOption:NSPropertyListMutableContainersAndLeaves」を使用して確認してください。これにより、静的として追加される要素と可変として追加される要素を非常に正確に制御できます。プロパティリストプログラマーガイドから:

プロパティリスト内のオブジェクトの可変性をよりきめ細かく制御する必要がある場合は、propertyListFromData:mutabilityOption:format:errorDescription:クラスメソッドを使用します。この2番目のパラメーターを使用すると、集約プロパティリストのさまざまなレベルでオブジェクトの可変性を指定できます。 。すべてのオブジェクトが不変(NSPropertyListImmutable)であるか、コンテナー(配列およびディクショナリ)オブジェクトのみが可変(NSPropertyListMutableContainers)であるか、またはすべてのオブジェクトが可変(NSPropertyListMutableContainersAndLeaves)であるかを指定できます。

たとえば、次のようなコードを書くことができます。

NSMutableArray *dma = (NSMutableArray *)[NSPropertyListSerialization
                        propertyListFromData:plistData
                        mutabilityOption:NSPropertyListMutableContainersAndLeaves
                        format:&format
                        errorDescription:&error];

この呼び出しにより、各要素に可変ディクショナリを持つ可変配列(dma)が生成されます。各辞書の各キーと各値は、それ自体も変更可能です。

于 2011-05-26T19:33:44.323 に答える
1

NSDictionaryの「mutableCopy」メソッドを使用して、辞書をそれ自体の可変コピーに置き換えることができます。

[編集]例:

[array replaceObjectAtIndex:42 withObject:[[[array objectAtIndex:42] mutableCopy] autorelease]];

于 2010-04-20T14:43:42.370 に答える