c++ - 通过委托(delegate)方法获取 C++ 模型以通知 Objective-C++ Controller

标签 c++ ios objective-c objective-c++

我用 C++ 编写了一个国际象棋游戏模型。现在,我想要一个 Objective-C++ controller 来初始化一个 model 对象并成为它的委托(delegate)。

因此,当模型完成它的任务时,它应该通知 Controller 并且 Controller 应该更新 View .

现在,当我像这样实例化 C++ 模型时:

Model *model = new Model();
model->delegate = self;

在 Objective-C++ 中。它给了我这个错误:

Assigning to 'Delegate *' from incompatible type 'NSObject *const __strong'

据我了解,我需要将委托(delegate)类型设为匿名容器(或 NSObject 类型的对象)。

当您像这样连接不同的语言时,最好的解决方案是什么?

编辑:

好的,所以我找到了解决方法,但现在我遇到了内存管理问题。我正在存储的 Objective-C 对象在退出作用域时被释放。这是代码:

struct SharedObjectiveCObject {
Class sharedObjectiveCObject;
public:
    SharedObjectiveCObject() : sharedObjectiveCObject([GameViewController class]) {}
};



class Controller {

private:
    GameViewController *gameViewController; // THIS GETS RELEASED ON EXITING SCOPE (THIS IS AN OBJECT OF OBJECTIVE-C CLASS)

public:
     Controller() {
        std::unique_ptr<SharedObjectiveCObject> sharedObjectiveCObject(new SharedObjectiveCObject());

        this->gameViewController = (__bridge GameViewController*)(sharedObjectiveCObject.get()); // THIS GETS RELEASED ON EXITING SCOPE
    }

第二次编辑:

换句话说,我和this有同样的问题.

最佳答案

委托(delegate)需要是实现适当委托(delegate)协议(protocol)的 Objective C 类;你不能只坚持 C++ 对象。我的解决方案是创建一个“中继”类,该类使用指向作为消息真正目标的 C++ 对象的指针进行初始化。调用委托(delegate)方法时,它会对 C++ 对象执行函数调用。

可以在项目pianod2 中找到示例, 在源文件 src/mediaunits/audio/osxplayer.mm 中。 PlayerHelper 类在 AVPlayer 和 AVPlayerItem(来自 AVFoundation 框架)和 C++ 类型 AVFoundationPlayer(也在 osxplayer.mm 中定义)的委托(delegate)之间提供垫片。

关于c++ - 通过委托(delegate)方法获取 C++ 模型以通知 Objective-C++ Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36387232/

相关文章:

iphone - 解析时的内存问题

c++ - 如何在 MSVC 中为传递给可变参数函数的非 POD 参数启用警告/错误?

c++ - 指向类成员作为模板参数的指针(具有以下类的类型)

c++ - 在不关闭流的情况下写入 Wave header 和添加数据

ios - NSNetService initWithDomain 使用本地 IP 地址?

ios - 为同一个新对象多次调用 Firebase FEventTypeChildAdded 回调

ios - 从一个 viewController 调用方法,同时显示另一个 viewController

ios - NSDate 的解析时间

objective-c - 自动滚动到 NSTextView 的末尾

c++ - 删除链表中的最后一个元素 (C++)