Конвертировать NSString в NSDictionary - PullRequest
4 голосов
/ 16 июня 2009

Есть ли способ получить NSDictionary обратно из строки, созданной с помощью метода description?

Учитывая этот код:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"value 1", @"value 2", nil] forKeys:[NSArray arrayWithObjects:@"key 1", @"key 2", nil]];
NSString *dictionaryString = [dictionary description];
NSLog(dictionaryString);

Что делает этот вывод:

{
    "key 1" = "value 1";
    "key 2" = "value 2";
}

Есть ли простой способ вернуться от строки к NSDictionary?

Ответы [ 4 ]

5 голосов
/ 16 июня 2009

С риском задать глупый вопрос: зачем вам это делать? Если вы хотите перейти к тексту и обратно, используйте класс NSPropertyListSerialization.

5 голосов
/ 16 июня 2009

Короткий ответ - нет. Текст описания предназначен для быстрого описания содержимого словаря, обычно для целей отладки.

Может быть возможно (но не рекомендуется) проанализировать выходную строку и использовать ее для заполнения нового словаря, но во многих случаях это не будет работать. Если, например, ваш исходный словарь содержит какие-либо пользовательские типы данных, вывод описания будет выглядеть примерно так:

{
    "key 1" = <SomeClass 0x31415927>;
    "key 2" = <SomeClass 0x42424242>;
}

Что, конечно, необратимо.

От разработчика Apple документация для description метода в NSDictionary:

Если каждый ключ в получателе является объектом NSString, записи перечислены в порядке возрастания по ключу, в противном случае порядок, в котором перечислены записи, не определен. Этот метод предназначен для создания читабельного вывода для целей отладки, а не для сериализации данных. Если вы хотите сохранить данные словаря для последующего извлечения, см. Руководство по программированию списка свойств и Руководство по программированию архивов и сериализаций для какао .

2 голосов
/ 09 февраля 2016
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"value 1", @"value 2", nil] forKeys:[NSArray arrayWithObjects:@"key 1", @"key 2", nil]];
    NSString *dictionaryString = [dictionary description];
    NSLog(@"%@", dictionaryString);

    NSDictionary *d = [dictionaryString propertyList];
    NSLog(@"%@", [d objectForKey:@"key 2"]);

Обратите внимание, что в документах Apple написано

/ * Эти методы больше не рекомендуются, поскольку они не работают со списками свойств и файлами строк в двоичном формате plist. Пожалуйста, используйте API в NSPropertyList.h вместо этого. * /

Однако, если вы знаете или можете подтвердить, что вы не передаете двоичный формат, это должно работать без проблем.

1 голос
/ 16 июня 2009

Я не думаю, что есть такой, вы можете написать метод самостоятельно, перечислив содержимое строки, это выглядит как довольно простой формат для просмотра.

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