2011-12-27 21 views
2

私は、アプリケーションデリゲートにある「Player」オブジェクトの配列で初期化することによって、異なるクラスの「Player」オブジェクトを作成しようとしています。このコードはios 4.3で動作していましたが、ios 5.0ではクラッシュしました(SIGABRTまたはexec_bad_access)。デリゲート配列を使用するとエラーが発生する

私はアプリケーションデリゲートをインポートしました。ここで

は失敗コードです:ここでは

PlaybookAppDelegate *delegate = (PlaybookAppDelegate *) 
[[UIApplication sharedApplication] delegate]; 
Player *thisPlayer = [delegate.players objectAtIndex:index.row]; 

は私AppDelegateで宣言です:ここ

@interface PlaybookAppDelegate : NSObject <UIApplicationDelegate> 
{ 
    NSMutableArray *players; 
} 

@property (nonatomic, retain) NSMutableArray *players; 

-(id)initWithIndexPath:(NSIndexPath *)indexPath{ 
if (self == [super init]) { 
    index = indexPath; 
} 
return self; 
} 
+0

クラッシュレポートをお願いします...トレースすると役に立つでしょう – Ali3n

+0

あなたはARCを使用していないと思いますか?また、スタックトレースがありますか?そうでない場合は、例外でブレークポイントを有効にして、デバッガでこれを実行できますか? –

答えて

3

indexPathは構造体ではないオブジェクトなので、所有権を取得しないと割り当てが解除されます。あなたのようなこの問題を解決することができるはずです。

また
-(id)initWithIndexPath:(NSIndexPath *)indexPath 
{ 
    if((self == [super init])) { 
    index = [indexPath retain]; // need to take ownership of this 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    // include all your regular -dealloc code 
    [index release]; 
    [super dealloc]; 
} 

、メモリの問題これらの種類と、それは純粋のiOS 5と、あなたがエラーを参照してください偶然ではそれはどちらかのiOS 4の下で動作しませんでした、あなたはちょうど幸運だった。

+0

の代わりに[indexPath retain]を使用すると、彼の質問に投稿されたコードに従ってself.index = indexPath – Ali3n

+1

@ Ali3nを使用することができます。indexはクラスのプロパティではないため、 'self.index'を設定することはできません。 –

+0

ありがとう@JasonCoco、それは完璧に機能しました!構造体とオブジェクトの参照資料を教えてください。 – USS1994

1

がやった "インデックス" を定義する方法であり、 Players配列をどこにでも初期化できますか?もしあなたがそうしなければ、それは悪いアクセスを引き起こすでしょう。

+0

私は、感謝してくれてありがとう! @ JasonCocoの解答を参照してください。 – USS1994

関連する問題