Плист массив, не может изменить внутри диктонары - PullRequest
0 голосов
/ 20 апреля 2010

У меня есть plist, который в своей основе является массивом с диктонарами внутри него.

Я загружаю список из своих ресурсов как NSMutableArray.

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

Я храню его в nsuserdefault, потому что он должен быть постоянным между запусками.

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

но я не могу изменить диктонары в массиве, потому что они не изменяемы. как я могу сделать их изменяемыми?

Ответы [ 2 ]

5 голосов
/ 26 мая 2011

Проверьте, используя «mutabilityOption: NSPropertyListMutableContainersAndLeaves», это дает вам очень точный контроль над тем, какие элементы добавляются как статические, а какие элементы добавляются как изменяемые.Из руководства по программированию списка свойств:

Если вам нужен более тонкий контроль над изменчивостью объектов в списке свойств, используйте свойство propertyListFromData: mutabilityOption: format: errorDescription: метод класса, второй параметр которогопозволяет указывать изменчивость объектов на разных уровнях списка совокупных свойств.Можно указать, что все объекты являются неизменяемыми (NSPropertyListImmutable), что только объекты контейнера (массива и словаря) являются изменяемыми (NSPropertyListMutableContainers) или что все объекты являются изменяемыми (NSPropertyListMutableContainersAndLeaves).

Например, вы можете написатькод такой:

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

Этот вызов создает изменяемый массив (dma) с изменяемыми словарями в каждом элементе.Каждый ключ и каждое значение в каждом словаре также являются изменяемыми.

1 голос
/ 20 апреля 2010

Вы можете заменить словарь изменяемой копией, используя метод mutableCopy в NSDictionary.

[EDIT] Пример:

[массив replaceObjectAtIndex: 42 withObject: [[[array objectAtIndex: 42] mutableCopy] autorelease]];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...