2

それが私が持っているものです:

クラス A :

#import "ppCore.h"

@interface ppApplication : NSApplication {
    ppCore* core;
}

@property (assign) ppCore* core;

@end


@implementation ppApplication

@synthesize core;

- (void)awakeFromNib
{
    [self setCore:[[[ppCore alloc] init] retain]];
}

クラス B :

#import "someObject.h"
#import "anotherObject.h"

@interface ppCore : NSObject<NSApplicationDelegate>  {
    ppSomeObject* someObject;
    ppAnotherObject* anotherObject;
}

@property (assign) ppSomeObject* someObject;
@property (assign) ppAnotherObject* anotherObject;

@end


@implementation ppCore

@synthesize someObject, anotherObject;

- (void)applicationDidFinishLaunching:(NSNotification *)notification 
{
     [self setSomeObject:[[ppSomeObject alloc] init]];
     [self setAnotherObject:[[ppAnotherObject alloc] init]];
}

そしてここに問題があります:

後の段階でppApplication、 にアクセスしようとしていますcore

coreある。

coreしかし、のいずれかの要素 (例: )にアクセスしようとすると[core someObject]、すべてが NULL になります (デバッガーで確認しました)...

私は何を間違っていますか??

4

4 に答える 4

2

次のようにオブジェクトを宣言しようとしましたか:

@property (nonatomic, retain) ppCore* core;

@property (nonatomic, retain) ppSomeObject* someObject;
@property (nonatomic, retain) ppAnotherObject* anotherObject;
于 2012-04-05T12:08:32.380 に答える
1

デリゲートにアクセスし、someObjectとanotherObjectの設定をデリゲートのinitメソッドに移動coreできるため、すべてを削除することをお勧めします。[[NSApplication sharedApplication] delegate]

于 2012-04-05T13:22:49.523 に答える
1

Antonio の言うとおりです。少しメモリの管理も必要です。

    #import "ppCore.h"

    @interface ppApplication : NSApplication {
        ppCore* core;
    }

    @property (nonatomic, retain) ppCore* core;

    @end


    @implementation ppApplication

    @synthesize core;

    - (void)awakeFromNib
    {
        ppCore* tempCore = [[ppCore alloc] init];   
        [self setCore: tempCore];
        [tempCore release];
    }

これは役立つかもしれません。

于 2012-04-05T12:17:24.670 に答える
0

- (void)applicationDidFinishLaunching:ppCoreオブジェクトが呼び出されると信じているのはなぜですか?どこかから明示的に呼び出す必要があるように思われます。

于 2012-04-05T13:19:29.040 に答える