如何正确加载我的课程?

时间:2011-09-21 15:46:38

标签: objective-c class initialization nsobject

我在一对外部文件中定义了一个类,我们将它们命名为 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

我应该如何正确加载课程? 欢迎任何建议。 感谢

2 个答案:

答案 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
}