【发布时间】:2017-08-10 06:23:01
【问题描述】:
我发现一些运行 iOS 9.3.5 的旧硬件存在一个奇怪的问题,但不是所有的旧硬件。我非常感谢任何关于为什么会发生这种情况的想法。我知道我可以使用单例全局解决这个问题,但这看起来很丑陋。
在糟糕的情况下,通过 segue 进行的数据传输不会到达新的视图控制器,而在其他运行 9.3.5 的旧硬件和所有新硬件的情况下,一切都按预期工作。
简而言之,我有一个应用程序,它使用我使用 Interface Builder(不是标准模板)构建的主/详细设计。主 ViewController 包括一个 UITableView 并且还使用 STCollapse 和 MMDrawerSideSlide 库。选择表格行会生成一个 segue,其中 prepareForSegue 将一些项目加载到 DetailViewController 的属性中。 NSString 属性总是可以到达,但在某些旧硬件中(见下文),所选行的 NSIndexPath 正确移动到主 VC 中 prepareForSegue 中的详细属性,但没有到达 DetailViewController 并且该属性为 NIL 时细节的 viewDidLoad 执行。
DetailViewController中NSIndexPath的硬件和iOS版本的值表
iPad 2 9.3.5 nil
iPad Air 9.3.5 nil
iPad Air2 9.3.5 correct
iPhone 5 9.3.5 nil
iPhone 5s 9.3.5 correct
iPhone 6 9.3.5 correct
all devices 10.x correct
代码片段
主视图控制器.m
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.selectedIndexPath = indexPath;
[self performSegueWithIdentifier:@"toDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"toDetail"])
{
DetailViewController *detailVC = segue.destinationViewController;
detailVC.selectedIndex = self.selectedIndexPath;
detailVC.searchName = _theName;
}
}
DetailViewController.h
@property (nonatomic, weak) NSIndexPath * selectedIndex;
@property (nonatomic, weak)NSString * searchName;
DetailViewController.m
- (void)viewDidLoad { //In new hardware _selectedIndex is OK, in some old hardware, is nil, _searchName is always OK!
[super viewDidLoad];
Kings *flatkings = [Kings sharedKings];
self.flatSequenceNumber = (int)[flatkings getFlatIndexFromTablePath:_selectedIndex];
[self drawTheView];
}
【问题讨论】:
标签: ios objective-c uiviewcontroller segue compatibility