Как добавить объект Objective-C ++ в NSMutableDictionary?

Я создаю приложение дополненной реальности в iOS, используя metaio SDK. В моем приложении у меня есть объект, подобный следующему,

metaio::IGeometry* geometryModel = m_metaioSDK->createGeometry([modelFile UTF8String]);

Я пытался добавить его в NSMutableDictionary,

[_currentObjectDirectory setObject:geometryModel forKey:@"1"];

currentObjectDirectory мой NSMutableDictionary объект. Есть ли какой-нибудь возможный способ сделать это?

Заранее спасибо!

0

Решение

Какие Амин Негм-Авад сказал в своем ответе верно. Тем не менее, вы могли бы использовать NSValue объект с valueWithPointer: обернуть ваш указатель C ++.

NSValue *geometryModelWrapper = [NSValue valueWithPointer:(void *)geometryModel];
[_currentObjectDirectory setObject:geometryModelWrapper forKey:@"1"];

Чтобы вернуть значение, используйте pointerValue:

metaio::IGeometry* geometryModel = [_currentObjectDirectory[@"1"] pointerValue];

Опять же, как сказал Амин, вы должны быть осторожны с управлением памятью. NSValue память не будет управлять вашим указателем, и вы должны убедиться, что он не освобожден, пока NSValue Обертка еще жива.
Внимательно прочитайте документ.

Этот вопрос очень близко к тому, что вы хотите достичь.

1

Другие решения

Вы не можете добавлять объекты C ++ в контейнер Какао.

Вы можете использовать контейнер C ++ или обернуть объект C ++ в объект Objective-C.

Изменить: Вот ссылки на Objective-C ++ (я не проверял их.)

http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects
http://www.drdobbs.com/cpp/interoperating-between-c-and-objective-c/240165502

В прежние времена у Apple была документация об этом:

http://web.archive.org/web/20101203170217/http://developer.apple.com/library/mac/#/web/20101204020949/http://developer.apple.com/library/mac/documentation/ Какао / Концептуальное / ObjectiveC / Статьи / ocCPlusPlus.html

1

По вопросам рекламы [email protected]