Как преобразовать текстовое (po) представление Objective C в реальный объект - PullRequest
1 голос
/ 11 марта 2010

В xcode вы можете использовать объект po, чтобы увидеть текстовое представление данного объекта. Можно ли преобразовать это текстовое представление в реальный объект c объектом?

Спасибо

Ответы [ 3 ]

6 голосов
/ 11 марта 2010

Полагаю, вы могли бы разобрать адрес, назначить его указателю и таким образом извлечь объект из памяти, но это УЖАСНО ПЛОХАЯ ИДЕЯ, И ВЫ НЕ ДОЛЖНЫ ДЕЛАТЬ ЭТОГО .

Реальный вопрос: что вы пытаетесь сделать?

1 голос
/ 31 мая 2013

У меня есть проект, который может вдохновить вас: он GitHub и он называется NDJSON . По сути, он использует интроспекцию во время выполнения для получения свойств, которыми обладает объект, и установки этих свойств с помощью ключа json того же значения. Вы можете сделать что-то подобное, но получить значения свойств вместо set. Чтобы помочь в ситуации, когда тип не может быть определен, например, тип объектов в коллекции или для сопоставления ключа json со свойством с другим именем, я определил неформальный протокол, который имеет некоторые методы, возвращающие сопоставление словаря json-ключа для имен свойств или класс, чтобы использовать для имени свойства, также есть метод, чтобы возвратить список ключей json, чтобы игнорировать или, альтернативно, единственные ключи, чтобы принять. Если вы посмотрите на мой код на git hub, есть класс NDJSONDeserializer , который содержит эту логику. Существует функция с именем getTypeNameFromPropertyAttributes (), которая анализирует строковый результат метода времени исполнения Apples property_getAttributes (), который вы захотите посмотреть.

0 голосов
/ 11 марта 2010

Нет, представление, которое вы видите из po <instance>, является результатом -[<instance> debugDescription], который по умолчанию возвращает -[<instance> description], как описано в http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html.

Если только экземпляр, с которым вы имеете дело, не предоставит описание, представляющее собой сериализованную форму, вы - SOL. Большинство объектов этого не делают.

Настоящий вопрос, как указывает Дейв, в том, что вы пытаетесь сделать? po работает только в консоли gdb, поэтому я предполагаю, что это проблема отладки. В таком случае, знаете ли вы, что консоль GDB поддерживает отправку сообщений экземплярам? Так что вы можете сделать:

po [<myInstance> methodReturningAnOtherObject]

или

po [<myInstance> valueForKeyPath:@"some.long.key.path"]

для отслеживания графа объектов из консоли отладчика.

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