我正在使用MVC架构开发一个GUI应用程序。模型类中有一些C函数。其中一个C函数调用了Objective-C类的一些方法。我使用该类的对象来调用这些方法。奇怪的是,在调用xyz方法之前的方法都被完美地调用,但在调用该方法及其后面的方法时却没有执行。 我没有收到任何错误信息。所以无法确定到底发生了什么。 有什么想法可以解决这个问题吗?
我正在使用MVC架构开发一个GUI应用程序。模型类中有一些C函数。其中一个C函数调用了Objective-C类的一些方法。我使用该类的对象来调用这些方法。奇怪的是,在调用xyz方法之前的方法都被完美地调用,但在调用该方法及其后面的方法时却没有执行。 我没有收到任何错误信息。所以无法确定到底发生了什么。 有什么想法可以解决这个问题吗?
正如Marc所指出的那样,您可能在objective-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];
}
在xyz方法之前设置断点,然后在调试器中开始单步执行。通过在调试器中单步执行代码,您会惊讶地发现有多少错误可以被发现。事实上,这是一种推荐的错误避免技术,对于您编写的任何新代码都应该进行单步执行。
我同意Marc的观点,“该方法及其后续方法未被执行”的经典原因是对象引用为nil,因为[nil doAnything]将不执行任何操作并报告没有错误。
有一个简单的方法来实现这个:
@implementation
// Define a object
ClassName *thisClass;
然后使用self进行初始化
thisClass = self;
在 C-Method 中,您可以使用任何变量和方法。