获取C++;通知Objective-C和x2B的模型+;通过委托方法的控制器 我在C++中编写了一个象棋游戏模型>强>。现在,我想要一个Objective-C++控制器来初始化一个模型对象并成为它的代理

获取C++;通知Objective-C和x2B的模型+;通过委托方法的控制器 我在C++中编写了一个象棋游戏模型>强>。现在,我想要一个Objective-C++控制器来初始化一个模型对象并成为它的代理,c++,ios,objective-c,objective-c++,C++,Ios,Objective C,Objective C++,因此,当模型完成其任务时,它应该通知控制器,控制器应该更新视图 现在我实例化C++ +>强>模型: Model *model = new Model(); model->delegate = self; 在Objective-C++中。它给了我这个错误: Assigning to 'Delegate *' from incompatible type 'NSObject *const __strong' 据我所知,我需要将委托的类型设置为匿名容器(或NSObject类型的对象) 当您像

因此,当模型完成其任务时,它应该通知控制器控制器应该更新视图

现在我实例化C++ +>强>模型<强>:

Model *model = new Model();
model->delegate = self;
在Objective-C++中。它给了我这个错误:

Assigning to 'Delegate *' from incompatible type 'NSObject *const __strong'
据我所知,我需要将委托的类型设置为匿名容器(或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
    }
struct sharedObjectVecObject{
类SharedObjectVecObject;
公众:
SharedObjectVecObject():SharedObjectVecObject([GameViewController类]){}
};
类控制器{
私人:
GameViewController*GameViewController;//在退出作用域时释放(这是OBJECTIVE-C类的对象)
公众:
控制器(){
std::unique_ptr SharedObjectiveObject(新的SharedObjectiveObject());
this->gameViewController=(u_桥gameViewController*)(sharedObjectVecObject.get());//在退出作用域时释放
}
第二次编辑:


换句话说,我有同样的问题。

< p>委托人需要实现一个目标C类,实现适当的委托协议;不能只粘贴C++对象。我的解决方案是创建一个“中继”。类的指针初始化为消息的实际目标的C++对象。当调用委托方法时,它对C++对象执行函数调用。
可以在项目中的源文件src/mediaunits/audio/osxplayer.mm中找到一个示例。PlayerHelper类提供了AVPlayer和AVPlayerItem(来自AVFoundation framework)的代理之间的垫片还有C++类型的AVFoundationPlayer,在OxPox.mm.

中也有定义。谢谢你的回答。我检查了你的代码,你把一个C++对象分配给Objto-C属性。我想做的正好相反,我想在C++中存储Objy-C引用,所以每当我想,我就可以把委托消息发送给它。这就是我想要的。An Obje。Active-C对象可在不知道其类型的情况下随时向其发送消息。我尝试了其他方法。该方法有效,但现在我遇到了内存管理问题,因为我存储的Objective-C对象已被释放。它不会保留很长时间。请查看编辑。您在unique_ptr中输入了一个值,然后使用.get()将其复制出来。这将指针留在unique_ptr手中,当指针超出范围时将被销毁。请改用.release(),它将移动指针。