Я создаю приложение дополненной реальности в 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++ в контейнер Cocoa.
Вы можете использовать контейнер 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 была документация об этом: