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

0

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

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

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

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

currentObjectDirectory - это мой объект NSMutableDictionary. Есть ли способ сделать это?

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

Теги:
nsmutablearray
objective-c++

2 ответа

1
Лучший ответ

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

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

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

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

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

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

  • 0
    Большое спасибо .. ясно и правильно
  • 0
    Если я его разверну, какова процедура?
Показать ещё 5 комментариев
1

Вы не можете добавить объекты 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 была документация об этом:

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

  • 0
    пожалуйста, дайте мне демонстрацию.
  • 0
    Это больше, чем одна строка. По сути, вы создаете класс, имеющий свойство для объекта C ++. Но вы должны позаботиться об управлении памятью в C ++.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню