客观C++从C访问一个NSSlider ++回调
AppController.h客观C++从C访问一个NSSlider ++回调
@interface AppController : NSObject {
}
@property (retain) IBOutlet NSSlider * mySlider;
void setMySlider (NSSlider *ns);// c function
AppController.m
@implementation AppController
int myAmount=0;
@synthesize mySlider;
void setMySlider(NSSlider *mySlider){
[ns setIntValue:10]; //ok
ns.intValue =myAmount;//ok
}
myCallBackFunction(double delta,std::vector<unsigned char>*myData,void *userData){
myAmount=50;
NSLog(@"%i", myAmount); // ok does display value of myAmount
// should move my slider the value of my amount by calling the following C function:
changeSliderVelocity(mySlider);// error message mySlider was not declared in this scope
}
号
在这种情况下,即使myCallBackFunction()
放置@implementation
和@end
之间它不在AppController
的类范围内。 int myAmount
就像一个静态的Class-Ish成员(我实际上不知道它的作用域是什么。Global?),因为你在Implementation文件中定义了它,它实际上并不是对象AppController
的一部分。
没有保证这将工作,但给它一个镜头。它假定只有一个(一个)AppController实例。阅读关于Obj-C/C++中单例的更多信息。
@implementation AppController
static AppController *sharedAppInstance = nil;
- (void) init
{
// ... whatever other code you have
if (sharedAppInstance == nil)
sharedAppController = self; //error message sharedAppController was not declared in //this scope. So I replaced the line sharedAppController = self; by:
sharedAppInstance= self;
}
myCallBackFunction(double delta,std::vector<unsigned char>*myData,void *userData){
changeSliderVelocity([[AppController sharedAppInstance] mySlider]); // Replace this line with to make it work:
changeSliderVelocity([sharedAppInstance mySlider]);//ok does work.
}
@end
感谢您的及时回复斯蒂芬我试过你的代码,但它有一个错误信息就出来了:sharedAppController范围没有宣布。我试图使用可可只是为了GUI。 myCallbackFunction将全局变量myAmount设置为50,它可以正常工作并更新滑块的位置,或将值myAmount显示到我遇到问题的NSTextField中。只要我尝试访问可可对象,我就会问题(错误未在此范围内声明)。 – 2011-02-24 17:53:52
@boubacar mamadou,试试这个:'[[AppController sharedAppInstance] mySlider]' – 2011-02-24 18:58:41
非常感谢你斯蒂芬你指出我在正确的方向。关键是创建init函数并将sharedAppInstance设置为self并且在回调中,通过c函数访问sharedAppInstance mySlider changeSliderVelocity.I在代码中更改了2行,可以随意查看。过去3周我一直试图解决这个问题,但没有成功。再次非常感谢你的帮助,如果没有它,我们将无法完成。 – 2011-02-25 19:05:51
请写出你的问题显然 – Dominic 2011-02-23 20:13:31