0

次のコードを実行すると失敗します。私の.hファイル:

 @interface OutlineManager : NSObject
    {
            NSMutableArray* mOutlines;
    }

    @property(nonatomic,strong)NSMutableArray* Outlines;


    +(void)initialize;

    @end

    static OutlineManager* outlnManager;

.mファイル内:

#import "OutlineManager.h"

@implementation OutlineManager

@synthesize Outlines = mOutlines;

+(void)initialize
{
    outlnManager = [[[OutlineManager superclass]alloc]init];
    if(outlnManager)
    {
        outlnManager.Outlines = [[NSMutableArray alloc]init]; //it crashes here
    }
    NSLog(@"OUTLINEMANAGER INITIALIZED");
}

@end

(void)initializeを実行すると、コメントを入力したifセクションでアプリケーションがクラッシュしますが、理由がわかりません。このような静的オブジェクトの配列を初期化できませんか?

非常に基本的なことだと思いますが、私はObj C / iOSでかなり新しいので、これを私に押し付けないでください。

ご助力ありがとうございます!

よろしくお願いいたします。Zoli

4

2 に答える 2

1

あなたが書いた:

outlnManager = [[[OutlineManager superclass]alloc]init];

そのスーパークラスは、OutlineManagerではなくNSObjectでallocを呼び出すことを意味します。この行を次のように置き換えてください。

outlnManager = [[OutlineManager alloc]init];

ああ、静的変数を.mファイルで宣言する必要があります。

于 2012-06-18T10:24:06.680 に答える
0

OutlineManager.h:

交換

static OutlineManager* outlnManager;

と:

OBJC_EXPORT OutlineManager* outlnManager;

そして、OutlineManager.mに追加します。

OutlineManager* outlnManager = nil;
+(void)initialize { // you should rename it to an other name.. initialize will be called twice
    outlnManager = [[OutlineManager alloc]init];
    if(outlnManager) {
        outlnManager.Outlines = [[NSMutableArray alloc]init];
    }
    NSLog(@"OUTLINEMANAGER INITIALIZED");
}
于 2012-06-18T11:24:43.420 に答える