2010-12-29 8 views
0

これを実行すると、エラーなしにアプリケーションがクラッシュする。私はクラス内のメソッドを呼び出す場合、それは動作します。クラス外から呼び出すとクラッシュする

footballScores = [[FootBallScores alloc] init]; 
[footballScores initStuff]; 

私はこれをビューコントローラのviewDidLoadから呼び出します。

しかし、私は

footballScores = [[FootBallScores alloc] init]; 
//[footballScores initStuff]; 

をコメントアウトおよび方法は、それがすべて完璧に動作クラスFootballScores内のinitメソッドにinitStuffを呼んで移動した場合。

だから、私のアプリがクラッシュする原因となっているクラス外のinitStuffという何らかの理由が考えられます。

なぜこのことが起こるのか教えてもらえますか?

多くのおかげで、 コード

-(void) init 
{ 
//[self initStuff]; 
} 

- (void)initStuff // Was - (void)awakeFromNib 
{ 
NSLog(@" init called"); 
appDelegate = (FootballRadioAppDelegate *)[[UIApplication sharedApplication] 
delegate]; 
responseData = [[NSMutableData data] retain]; 
baseURL = [[NSURL 
URLWithString:@"http://footballmatchcentre.timesonlinesport.co.uk/ifb2009/league.asp? 
league=EPL"] retain]; 
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL]; 
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease]; 
} 

を編集INITの本体は、クラスの外からの呼び出しをテストするためにコメントアウト取得し、私はそれは内から呼び出さ取得することにより動作するかどうかをテストするためにそれをアンコメントクラス。

+1

'init'と' initStuff'メソッドの本体を見せてください。 – Richard

+0

-initと-initStuffの実装を見ずには分かりません。エラーを再現するテストケースを最小限に抑えることができれば、正確な回答を得ることができます。 –

+0

OK両方のメソッドからコードを追加しました。かなり基本的なコード。 –

答えて

2

あなたの-initメソッドは、voidではなくid型のselfを返さなければなりません。それは[super init]をselfに帰するべきです。標準-initの実装は次のようになります。

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

次に、あなたが持つことができる - (無効)initStuff方法をしている場合、その内部で自己= nilのかどうかをテストするブロックを[自己initStuff]を送って!。

関連する問題