سؤال

أنا لست أحمق لكن الملفات رأس تجعلني أشعر واحد في بعض الأحيان.لدي ما هو على الارجح بشكل مفرط-إعداد معقد يحتوي على الأخطاء التي لا يمكن حلها.هنا هو في عن بسيطة بقدر من التفصيل كما أنا يمكن أن تجعل من....

  • لدي جهاز تحكم فئة الذي يحتوي على نموذج الطبقة.
  • لدي مشهد الدرجة لالتقاط الإجراءات والتواصل مع وحدة تحكم.
  • لدي طبقة فئة محادثات مع نموذج الطبقة لإخراج الدولة من النموذج.
  • الطبقة المشهد يحتوي على طبقة فئة فقط من أجل الإخراج.
  • مشاهد يجب أن يحمل طبقات على النحو الذي يحدده Cocos2D الإطار.
  • مشهد معين الطبقات تستمد من RootScene الدرجة التي تحمل إشارة إلى وحدة تحكم فئة.
  • طبقة محددة الطبقات تستمد من RootLayer الدرجة التي تحمل إشارة إلى نموذج الطبقة.
  • وحدة تحكم المسؤول عن خلق مشاهد ومشاهد هي المسؤولة عن خلق طبقات.

المشكلة تأتي عندما صنع طبقة ويمر المراقب المالي نموذج طبقة نموذج (في AScene.m).أحصل على "طلب الأعضاء" نموذج "في شيء لا بنية أو الاتحاد".صب لا يعمل و انا في حيرة كيف تسمح هذه الفئات التحدث مع بعضهم البعض.أعتقد أن جزءا من المشكلة قد يكون أن تحكم فئة على فئة نموذج.

تحكم.ح

#import <Foundation/Foundation.h>

@class Model;
@class AScene;

@interface Controller : NSObject {
    Model *Model;
}
@property (nonatomic, retain) Model *Model;
-(void)runScene;

تحكم.م

#import "Controller.h"

#import "Model.h"
#import "AScene.h"

@implementation Controller

@synthesize Model;

- (void)runScene {
    AScene *newScene = [[AScene alloc] init];
    newScene.controller = self;
}

RootScene.ح

#import "cocos2d.h"

@class Controller;

@interface RootScene : Scene {
    Controller *controller;
}
@property (nonatomic, retain) Controller *controller;

@end

RootScene.م

#import "RootScene.h"
#import "Controller.h"

@implementation RootScene

@synthesize controller;

- (id) init {
    self = [super init];
    if (self != nil) {
        //
    }
    return self;
}

- (void) dealloc {
    [controller release];
    [super dealloc];
}

@end

AScene.ح

#import "RootScene.h"

@class ALayer;
@class Model;

@interface AScene : RootScene {
}

@end

AScene.م

#import "AScene.h"
#import "ALayer.h"
#import "Model.h"

@implementation AScene

- (id) init {
    self = [super init];
    if (self != nil) {
        ALayer *newLayer = [ALayer node];
        newLayer.model = controller.Model; // <-- Request for member 'Model' in something not a stucture or union
        [self addChild:statusScreenLayer];
    }
    return self;
}

- (void) dealloc {
    [super dealloc];
}

@end

RootLayer.ح

#import "cocos2d.h"

@class Model;

@interface RootLayer : Layer {
    Model *model;
}
@property (nonatomic, retain) Model *model;

@end

RootLayer.م

#import "RootLayer.h"

#import "Model.h"

@implementation RootLayer

@synthesize model;

- (id) init {
    self = [super init];
    if (self != nil) {
        //
    }
    return self;
}

- (void) dealloc {
    [model release];
    [super dealloc];
}

@end

ALayer.ح

#import "RootLayer.h"

@interface ALayer : RootLayer {
}
-(void) draw;

@end

ALayer.م

#import "ALayer.h"

@implementation ALayer

-(void) draw {
    // draw based on state of the model
}

@end
هل كانت مفيدة؟

المحلول

الخاص بك تنفيذ AScene لا #import رأس Controller.

تحرير: صراحة الحل.

في AScene.م إضافة:

#import "Controller.h"

نصائح أخرى

نيكولاي يبدو أن يكون على حق.أبعد من ذلك ، أفضل الممارسات من شأنه أن تملي هذه الخصائص (مثل ivars) لا ينبغي أن تبدأ بحرف كبير.أنت تطلب يضر.استخدام هذه بدلا من ذلك:

تحكم.ح

@interface Controller : NSObject {
    Model *model;
}
@property (nonatomic, retain) Model *model;

تحكم.م

@synthesize model;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top