2011-12-22 11 views
0

を引き起こしているのメソッドを呼び出すと、私は新しいビューを提示して、いくつかのデータをロードするメソッドを呼び出します。私のスカウトレポートビューで別のビューコントローラは、私が新しいビューに移行していたループ

-(IBAction)switchToScoutingReport:(id)sender 
{  
    InspectAppDelegate *dataCenter = (InspectAppDelegate *) [[UIApplication sharedApplication] delegate]; 

    [self saveData]; 

    ScoutingReportViewController *scoutingReport = [self.storyboard instantiateViewControllerWithIdentifier:@"ScoutView"]; 

    [self setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
    [self presentModalViewController:scoutingReport animated:YES]; 
    [scoutingReport setScoutingEventData:[dataCenter.eventsArray objectAtIndex:0]]; 
} 

コントローラは、このメソッドを呼び出します:

-(void)setScoutingEventData:(ScoutingEventData *)scoutingEventDataInput 
{ 
    NSLog(@"setting event data"); 

    self.scoutingEventData = scoutingEventDataInput; 
    [self loadDataWithEvent]; 
} 

をし、何らかの理由で、これは私の出力です:

STある
2011-12-22 10:17:20.637 Inspect[329:207] setting event data 
2011-12-22 10:17:20.637 Inspect[329:207] setting event data 
2011-12-22 10:17:20.638 Inspect[329:207] setting event data 
2011-12-22 10:17:20.638 Inspect[329:207] setting event data 
2011-12-22 10:17:20.639 Inspect[329:207] setting event data 
2011-12-22 10:17:20.640 Inspect[329:207] setting event data 
2011-12-22 10:17:20.640 Inspect[329:207] setting event data 
2011-12-22 10:17:20.641 Inspect[329:207] setting event data 

無限ループでうまくいく。

私はなぜそのループ、それを行うためのループコードがないのか分かりません。それは "セット"メソッドを使用することについて特別なものですか?私はscoutingEvenDataを作成するために@propertyと@synthesizeを使用します。今私はそれを考える、私はちょうど私の他のビューコントローラでscoutingEvenDataを設定することができます。

でも、このコードがループを作成する理由にはまだ興味があります。何か案は?

編集:私は、他のクラスからloadDataWithEventを呼び出すときsetScoutingEventDataメソッドが呼び出され、ループしている(setScoutingEventDataが直接のいずれかのコントローラに呼び出されることはありません)....:/

答えて

3

あなたの問題は明らかであるあなたがセッターを呼び出していますセッター内、そのため、あなたの「infiteループは、」あなたは、いくつかのバッキングIVARを持っていると仮定すると

-(void)setScoutingEventData:(ScoutingEventData *)scoutingEventDataInput 
{ 
    NSLog(@"setting event data"); 
    //here you are setting scotingEventData which calls this same method! 
    self.scoutingEventData = scoutingEventDataInput; 
    [self loadDataWithEvent]; 
} 

を持って、それは、あなたのコードが実際に

-(void)setScoutingEventData:(ScoutingEventData *)scoutingEventDataInput 
{ 
    NSLog(@"setting event data"); 
    //here you are setting scotingEventData which calls this same method! 
    _scoutingEventData = scoutingEventDataInput; 
    [self loadDataWithEvent]; 
} 
のようになります_scoutingEventData呼び出すことができます

ポイント:self.propertyを呼び出すプロパティを持つと、setPropertyメソッドがトリガされます... setter内で呼び出しているので、メソッドは何度も繰り返し呼び出します。おそらく、おそらくスタックオーバーフローが発生します。 。

+0

haha​​、意味があります。以前はセッターメソッドを実際に使ったことはありませんでしたが、このロジックプロセスはちょうど私がやろうとしていたことに対して意味をなさぎました。最初のコントローラにself.scoutingEvenDataを直接設定し、loadDataWithEventを直接呼び出すように変更しました。説明ありがとう。 – Padin215

関連する問題