无法从C函数调用Objective C方法

时间:2008-11-20 10:28:11

标签: objective-c

我将MVC架构用于GUI应用程序。模型类有一些C函数。其中一个C函数调用Objective-C类的一些方法。我使用该类的对象来调用这些方法。发生的奇怪事情是先前对xyz方法的方法被完美地调用,但是当调用xyz方法时,该方法及其之后的方法不会被执行。 我没有得到任何错误。所以无法弄清楚到底发生了什么。 关于这可能是什么原因的任何想法?

4 个答案:

答案 0 :(得分:56)

正如Marc所指出的那样,你可能正在使用对在object-c范围之外未初始化的OBJC对象的引用。

以下是调用ObjC对象方法的C代码的工作示例:

#import <Cocoa/Cocoa.h>

id refToSelf;

@interface SomeClass: NSObject
@end

@implementation SomeClass
- (void) doNothing
{
        NSLog(@"Doing nothing");
}
@end

int otherCfunction()
{
        [refToSelf doNothing];
}


int main()
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    SomeClass * t = [[SomeClass alloc] init];
    refToSelf = t;

    otherCfunction();

    [pool release];
}

答案 1 :(得分:1)

你绝对可以从C函数运行Obj-C对象的方法,所以在某些时候你的代码可能会出错。如果我不得不猜测,当你不指望它时,它听起来就像一个物体是零。通常,您首先在函数中设置断点,以便了解相关对象的状态。

答案 2 :(得分:1)

在xyz之前的方法断点,然后在调试器中启动单步执行。通过单步执行调试器中的代码,您可以发现多少错误。实际上,这实际上是一种推荐的错误避免技术,总是单步执行您编写的任何新代码的代码。

我同意Marc,“该方法及其后未执行的方法”的经典原因是对象引用为零,因为[nil doAnything]将不执行任何操作并且不会报告错误。

答案 3 :(得分:0)

这是一种简单的方法:

@implementation
// Define a object
ClassName *thisClass;

然后使用self

初始化
thisClass = self;

您可以在C-Method

中使用任何var和方法