Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';自我';不是有效的目标。混合目标-C和C++;(目标-C+;+;) 我已经有了一些混合C++和ObjuleC(实际上Objul-C++)的方法,但是现在我被卡住了。_C++_Objective C_Selector_Objective C++ - Fatal编程技术网

';自我';不是有效的目标。混合目标-C和C++;(目标-C+;+;) 我已经有了一些混合C++和ObjuleC(实际上Objul-C++)的方法,但是现在我被卡住了。

';自我';不是有效的目标。混合目标-C和C++;(目标-C+;+;) 我已经有了一些混合C++和ObjuleC(实际上Objul-C++)的方法,但是现在我被卡住了。,c++,objective-c,selector,objective-c++,C++,Objective C,Selector,Objective C++,我当前的问题是Objective-C“self”变量似乎不正确,并在代码中引发异常: Exception: Invalid parameter not satisfying: target 我假设它指的是selfRef不是有效的目标: addTarget:selfRef 什么是初始化“自我”的正确方法,并使它可以用于C++函数。< /P> 这是我第一天接触objective-c/objective-c++,请原谅,这可能是基本的;) 代码: #导入“ios_objc.h” #进口 #进口

我当前的问题是Objective-C“self”变量似乎不正确,并在代码中引发异常:

Exception: Invalid parameter not satisfying: target
我假设它指的是selfRef不是有效的目标:

addTarget:selfRef

什么是初始化“自我”的正确方法,并使它可以用于C++函数。< /P> 这是我第一天接触objective-c/objective-c++,请原谅,这可能是基本的;)

代码:

#导入“ios_objc.h”
#进口
#进口
#进口
#进口
id selfRef;
//静态Ios_objc*selfRef//我也试过这个。
@实现Ios_objc
IosImpl::IosImpl(void)/:self(NULL)
{
}
IosImpl::~IosImpl(void)
{
[Ios_objc dealloc];
}
void IosImpl::init(void)
{
selfRef=[[Ios_objc alloc]init];
}
void IosImpl::enable(void)
{
[[AVAudioSession sharedInstance]设置类别:AVAudioSessionCategoryPlayback错误:nil];
MPRemoteCommandCenter*commandCenter=[MPRemoteCommandCenter共享命令中心];
commandCenter.playCommand.enabled=是;
@试一试{
[commandCenter.playCommand addTarget:selfRef action:@selector(播放声音)];
}
@捕获(NSException*异常){
NSLog(@“异常:%@”,异常原因);
}
[[UIApplication sharedApplication]开始接收RemoteControlEvents];
}
void IosImpl::playSounds()
{
NSLog(“播放”);
}
//我还尝试了“Objective-C”风格的函数签名。
//-(空)播放声音
//{
//
//}

@结束
我认为异常来自于
-[MPRemoteCommand addTarget:action://code>实现中的一条语句,该语句类似于:

NSParameterAssert(target);
也就是说,它正在验证它接收到的
target
参数是否为非
nil
。这就是为什么奇怪的措辞“…参数不满足:目标”。“目标”是被测试的实际条件,参数不满足。如果语句已编写
NSParameterAssert(target!=nil)那么异常原因将读取“…参数不满足:目标!=nil”,这将更清楚

不管怎样,您在
IosImpl::init()
中向
selfRef
写入一个(可能是非
nil
)值,但这叫什么?构造函数与当前编写的不一致。从构造函数调用
init()
,或者直接将代码放入构造函数中


另外,你的析构函数是不正确的。正如目前编写的,它在
Ios_objc
类对象上调用
-dealloc
,这不太可能做任何事情(如果做了,那也没什么好处)。您的意思可能是
[selfRef release]
注意:
release
,而不是
解除锁定
)。一般来说,除了在您自己的
-dealoc
方法的实现中调用
-dealoc
之外,您不应该调用
-dealoc

我认为异常来自
-[MPRemoteCommand addTarget:action://code>实现中的一条语句,该语句类似于:

NSParameterAssert(target);
也就是说,它正在验证它接收到的
target
参数是否为非
nil
。这就是为什么奇怪的措辞“…参数不满足:目标”。“目标”是被测试的实际条件,参数不满足。如果语句已编写
NSParameterAssert(target!=nil)那么异常原因将读取“…参数不满足:目标!=nil”,这将更清楚

不管怎样,您在
IosImpl::init()
中向
selfRef
写入一个(可能是非
nil
)值,但这叫什么?构造函数与当前编写的不一致。从构造函数调用
init()
,或者直接将代码放入构造函数中


另外,你的析构函数是不正确的。正如目前编写的,它在
Ios_objc
类对象上调用
-dealloc
,这不太可能做任何事情(如果做了,那也没什么好处)。您的意思可能是
[selfRef release]
注意:
release
,而不是
解除锁定
)。一般来说,您不应该调用
-dealloc
,除非在您自己的
-dealloc
方法的实现中调用
super

@SeekAddo:Ops,已删除!尝试在类构造函数中将其用作null和init selfRef。在这里的代码中,
selfRef
是一个全局变量。这意味着它不属于
IosImpl
的一个实例;只有一个变量在
IosImpl
的所有实例中共享。您在
IosImpl
中管理
selfRef
内存的方式使您觉得
IosImpl
实例拥有
selfRef
,这是不正确的。例如,如果您同时有两个
IosImpl
实例处于活动状态,则创建的第二个实例将覆盖
selfRef
变量,泄漏第一个
IosImpl
实例分配给
selfRef
Ios_objc
对象,该对象被保留而未被释放;当两个
IosImpl
实例都销毁并向
selfRef
指向的对象发送
release
(如果您根据接受的答案更正了代码)时,它将过度释放第二个仅保留一次的
Ios_objc
对象。我已经在这个桥接主题上做了进一步的讨论,并且处理了您提到的其他内容。也许我可以在为更多的谷歌用户完成后发布最终代码。@SeekAddo:Ops,删除!尝试在类构造函数中将其用作null和init selfRef。在这里的代码中,
selfRef
是一个全局变量。这意味着它不属于
IosIm的一个实例