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