我正在转换到一个新 View ,我呈现新 View ,然后调用一个方法来加载一些数据:
-(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]];
}
在我的侦察报告 View Controller 中,它调用了这个方法:
-(void)setScoutingEventData:(ScoutingEventData *)scoutingEventDataInput
{
NSLog(@"setting event data");
self.scoutingEventData = scoutingEventDataInput;
[self loadDataWithEvent];
}
出于某种原因,这是我的输出:
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
陷入无限循环。
我不知道为什么它会循环,没有循环代码可以做到这一点。使用“set”方法有什么特别之处吗?我确实使用@property 和@synthesize 来创建scoutingEvenData。现在我想到了,我可以在我的另一个 View Controller 中设置 scoutingEvenData。
但仍然对为什么这段代码会创建一个循环感兴趣。有什么想法吗?
编辑:当我从另一个类调用 loadDataWithEvent 时,setScoutingEventData 方法被调用并循环(setScoutingEventData 永远不会在任何一个 Controller 中直接调用)......:/
最佳答案
你的问题很明显,你在 setter 中调用 setter,因此你有“无限循环”
-(void)setScoutingEventData:(ScoutingEventData *)scoutingEventDataInput
{
NSLog(@"setting event data");
//here you are setting scotingEventData which calls this same method!
self.scoutingEventData = scoutingEventDataInput;
[self loadDataWithEvent];
}
假设您有一些支持 ivar,我们称它为 _scoutingEventData 那么您的代码实际上应该看起来像
-(void)setScoutingEventData:(ScoutingEventData *)scoutingEventDataInput
{
NSLog(@"setting event data");
//here you are setting scotingEventData which calls this same method!
_scoutingEventData = scoutingEventDataInput;
[self loadDataWithEvent];
}
要点:当您有一个调用 self.property 的属性时,将触发 setProperty 方法...因为您在 setter 中调用它,该方法只会一遍又一遍地调用它自己...您最终可能会得到一个 stackoverflow.. .
关于iphone - 在另一个 View Controller 中调用方法导致循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8606784/