Я создаю приложение дополненной реальности в iOS, используя metaio
SDK. В моем приложении у меня есть объект, подобный следующему,
metaio::IGeometry* geometryModel = m_metaioSDK->createGeometry([modelFile UTF8String]);
Я пытался добавить его в NSMutableDictionary
,
[_currentObjectDirectory setObject:geometryModel forKey:@"1"];
currentObjectDirectory
мой NSMutableDictionary
объект. Есть ли какой-нибудь возможный способ сделать это?
Заранее спасибо!
Какие Амин Негм-Авад сказал в своем ответе верно. Тем не менее, вы могли бы использовать NSValue
объект с valueWithPointer:
обернуть ваш указатель C ++.
NSValue *geometryModelWrapper = [NSValue valueWithPointer:(void *)geometryModel];
[_currentObjectDirectory setObject:geometryModelWrapper forKey:@"1"];
Чтобы вернуть значение, используйте pointerValue
:
metaio::IGeometry* geometryModel = [_currentObjectDirectory[@"1"] pointerValue];
Опять же, как сказал Амин, вы должны быть осторожны с управлением памятью. NSValue
память не будет управлять вашим указателем, и вы должны убедиться, что он не освобожден, пока NSValue
Обертка еще жива.
Внимательно прочитайте документ.
Этот вопрос очень близко к тому, что вы хотите достичь.
Вы не можете добавлять объекты 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 была документация об этом: