如何在可可中调用我的方法,自我不起作用

时间:2011-02-10 11:07:11

标签: objective-c cocoa macos

当用户通过控件按下连接到mac的物理按钮时,处理将从网络摄像头录制一些内容的程序。在我的应用程序的其他地方调用方法只是做[自我方法:输入],但在一个地方它不起作用。可能有什么不对?

如果我在程序中获得inputchange,这是我想要运行的方法。

我也这样做 - (void)reportButton2:(NSInteger)inputVal:(NSInteger)inputInd;在我的.h文件中。

-(void)reportButton2:(NSInteger)inputVal:(NSInteger)inputInd {

//NSLog(@"phidget för port = %%d med signal %%d", ind, val);

if(inputVal == 1)
{

    NSError* error;

    NSFileManager* deleteMgr = [NSFileManager defaultManager];
    NSString* path = @"/Users/Shared/tempFile.mov";
    [deleteMgr removeItemAtPath:path error:&error];

    [mCaptureMovieFileOutput recordToOutputFileURL:[NSURL fileURLWithPath:@"/Users/Shared/tempFile.mov"]];

}
else if(inputVal == 0)
{
    [mCaptureMovieFileOutput recordToOutputFileURL:nil];
}  
}

如果按钮的输入发生变化,下面的代码会给出结果。在这里,我似乎无法调用reportbutton2。

如果我尝试使用[self reportButton2 ..]给我“使用未声明的标识符'self'”

int gotInputChange(CPhidgetInterfaceKitHandle phid, void *context, int ind, int val) {

what to do here?

return 0; 

}

5 个答案:

答案 0 :(得分:4)

问题是gotInputChange是一个C函数而不是Objective C方法,所以没有udea是什么自己,因为它不属于一个类。

对于[self reportButton2 ... =要工作,它需要是你班级的方法

答案 1 :(得分:2)

我通常把这样的东西放在gotInputChange之类的回调顶部:

MyObject *self = (id)context;

然后我可以在整个函数中使用self,就像它是一个方法一样。

在函数中的另一件事情更难以断言条件。常规断言宏(例如NSAssertNSParameterAssert)要求每个方法(self都是其中之一)的隐式参数都存在。在C函数中,您必须改为使用NSCAssertNSCParameterAssert等。

答案 2 :(得分:2)

您也可以使用您的代表。

SomeNameAppDelegate *delegate = (SomeNameAppDelegate *)[[NSApplication sharedApplication] delegate];
[delegate yourMethodName];

如果您的目标方法在AppDelegate类中,它就像在示例中一样。但是当你有权访问委托时,你可以创建一个指向必要类的指针,并将它们用于委托。

答案 3 :(得分:0)

最快但不太好的方法是让你的类成为一个单例并从get Input Change函数访问它。

答案 4 :(得分:0)

好的,谢谢!没有任何线索,C本来就不会解决它。做了一些谷歌搜索,这个为我做了伎俩。

[(id)context performSelectorOnMainThread:@selector(reportButton2:)withObject:[NSArray arrayWithObjects:[NSNumber numberWithInt:ind], [NSNumber numberWithInt:val], nil] waitUntilDone:NO];