我在一对外部文件中定义了一个类,我们将它们命名为 engine.h 和 engine.m 。另外,它给了我“engineListener.h”文件。 这就是他们的样子:
文件engine.h:
@interface coreEngine: NSObject {
NSString *displaydValue;
id <coreEngineListener> listener;
}
-(coreEngine*)initWithListener:(id <coreEngineListener>) _listener;
//...
档案 engine.m
//imports here
@interface coreEngine()
-(Boolean) MyOperation: ... ... (etc)
@end
文件 engineListener.h
//imports here...
@class coreEngine;
@protocol coreEngineListener <NSObject>
@required
-(void) someVariable:(coreEngine *)source;
@end
现在,在我的 myController.h 中,我有这个:
//... imports and include ...
@interface myController : NSObject
{
coreEngine *PhysicsEngine;
}
- (IBAction)doSomething:(id)sender;
在 myController.m 中,这就是我所拥有的:
-(id) init
{
NSAutorelease *pool = [[NSAutoreleasePool alloc] init];
coreEngine *PhysicsEngine = [[coreEngine alloc] init];
[PhysicsEngine release];
[pool drain];
return self;
}
- (IBAction)doSomething:(id)sender
{
[PhysicsEngine MyOperation:Something];
}
现在的事情是:代码编译正确,但“[PhysicsEngine MyOperation:Something]”无效。我确定我错误地实例化了我的课程。在我必须加载的“engine.h engine.m和enginelistener.h”中定义的NSObject不是由我制作的,我无法修改它。
我已经尝试根据我在互联网上看到的内容做了一些虚拟/随机的事情,却不知道我在做什么。我甚至不熟悉ObjectiveC或C / C ++,所以要对我很温柔。我在这个问题上完全是诺布。 我正在使用Xcode 4,我也可以访问XCode 3.2.6
我应该如何正确加载课程? 欢迎任何建议。 感谢
答案 0 :(得分:1)
您的界面应该有:
PhysicsEngine *coreEngine;
和MyController.m init:
PhysicsEngine *coreEngine = [[PhysicsEngine allow] init];
如果您的代码完全可以编译,我会感到惊讶。
此外,惯例是类是大写的,而变量不是。可能还有更多要评论的内容,但你应该从那开始。
答案 1 :(得分:1)
你的班级-init
应该是这样的:
- (id)init
{
self = [super init];
if (self != nil)
{
coreEngine = [[PhysicsEngine alloc] initWithListener:self]; // I assume you don't have a property declared
}
return self;
}
这遵循用于初始化类的标准设计模式。您实际上是通过在-init
上调用super
来进行初始化。之后,如果self
已正确初始化(因为它几乎总是如此),则可以创建PhysicsEngine
对象。请注意,您的类需要符合PhysicsEngineListener
协议并实施-someVariable:
。
// Declares protocol conformance
@interface MyController : NSObject <PhysicsEngineListener>
// In MyController.m
- (void)someVariable:(PhysicsEngine *)source
{
// Do whatever this is supposed to do
}