【发布时间】:2015-02-28 18:42:18
【问题描述】:
我试图直接从其兄弟窗口显示 ViewController,树看起来像这样:CalibrationVC Settings VC。 MainVC 在当前上下文中以模态方式呈现其他两个。现在我要做的是单击 SettingsVC 中的一个按钮,这将打开特定设备的 CalibrationVC。我已经设法使用 unwind segues 和来自 SettingsVC 的委托来做到这一点,它看起来像这样:
- (void)showViewForDeviceCalibration
{
[self performSegueWithIdentifier:@"showCalibrationViewFromSettings" sender:nil];
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showCalibrationViewFromSettings"])
{
[_delegate calibrateDevice:deviceToConfigure];
}
}
委托实现:
-(void)calibrateDevice:(Device *)device
{
dispatch_block_t autoinitService =
^{
deviceToCalibrateFromSettings = device;
[NSThread sleepForTimeInterval:0.2];
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"showCalibrationViewForDeviceFromSettings" sender:nil];
});
};
dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), autoinitService);
}
以及准备转场方法:
- (void)prepareForSegue: (UIStoryboardSegue *)segue sender:(id) sender
{
if ([segue.identifier isEqualToString:@"showCalibrationViewForDeviceFromSettings"])
{
CalibrationViewController *destinationController = (CalibrationViewController*)segue.destinationViewController;
NSArray *devicesToCalibrate = [NSArray arrayWithObject:deviceToCalibrateFromSettings];
[destinationController setDevicesToCalibrate: devicesToCalibrate];
}
这很好用,但有更好的方法吗?我真的很关心委托实现,因为它使用单独的线程只是等待片刻,然后再次使用主线程。我必须这样做,因为没有它,CalibrationVC 就不会显示 MainVC 已经呈现。所以总结一下,有没有更好、更优化/合适的方法来做到这一点?
【问题讨论】:
标签: ios objective-c multithreading