iphone - 在另一个 View Controller 中调用方法导致循环

标签 iphone objective-c ios

我正在转换到一个新 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/

相关文章:

iphone - 隐藏状态栏

ios - 是否有用于Windows的iPAD模拟器,以便使用我们的ipa文件进行测试?

iphone - 如何更改后退按钮上的弹出 View Controller 动画?

objective-c - 需要帮助安装 ELCImagePickerController?

iphone - 程序收到信号 : “EXC_BAD_ACCESS”

objective-c - 捏合缩放 - 无法在缩放时保持图像位置固定

iphone - 无法上传图片

android - 获取非电话 iDevices 和 Android 平板电脑的唯一 ID

ios - uielementinput 未显示在 gpuimage 中

iphone - 添加文本到图像