[英]calling a method in another view controller is causing a loop
我正在过渡到新视图,现在显示新视图,然后调用一种方法来加载一些数据:
-(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];
}
出于某种原因,这是我的输出:
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
陷入无限循环。
我不知道为什么要循环,没有循环代码可以做到这一点。 使用“设置”方法有什么特别之处吗? 我确实使用@property和@synthesize创建scoutingEvenData。 现在我想到了,我可以在其他视图控制器中设置scoutingEvenData。
但仍对为什么此代码创建循环感兴趣。 有任何想法吗?
编辑:setScoutingEventData方法被调用并在我从另一个类调用loadDataWithEvent时循环(setScoutingEventData从未在任何一个控制器中直接调用)....:/
您的问题很明显是您在setter中调用setter,因此您的“ infite loop”
-(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 ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.