只有当用户在iPhone和iPad上时才能运行代码块吗?

时间:2012-07-14 18:35:15

标签: objective-c xcode xcode4.3 master-detail

我有一个适用于iPad的大师级详细应用。但是,iPhone版本不起作用,因为发送到iPad版本中的DetailViewController的变量不会发送到iPhone DetailViewController。我可以通过MasterViewController实现中的一行代码来解决这个问题:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    self.detailViewController=segue.destinationViewController;
}

不幸的是,当我实现该代码时,iPad版本停止工作。当我从另一个视图控制器(HomeViewController)返回DetailViewController时,我收到异常。该错误日志是:

2012-07-14 14:29:12.924 46 Tracker[2772:11603] -[HomeViewController setDetailItem:]: unrecognized selector sent to instance 0x7cad4f0
2012-07-14 14:29:12.925 46 Tracker[2772:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[HomeViewController setDetailItem:]: unrecognized selector sent to instance 0x7cad4f0'
*** First throw call stack:
(0x148a022 0x201acd6 0x148bcbd 0x13f0ed0 0x13f0cb2 0x2cb0 0x2d75c5 0x2d77fa 0xb6c85d 0x145e936 0x145e3d7 0x13c1790 0x13c0d84 0x13c0c9b 0x16a07d8 0x16a088a 0x246626 0x1fdd 0x1f45)
terminate called throwing an exception(lldb) 

那么,只有当用户在iPhone上时,我才能运行第一个代码块吗?或者,我可以修复代码以使其在两个设备上都正常工作吗?

这是我的iPad故事板的链接(希望)让它更清晰。当我从HomeViewController返回DetailViewController后点击表格单元格时出现问题:http://www.grapekeeper.com/storyboards.png

1 个答案:

答案 0 :(得分:4)

也许以下几点?

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // perform iPad logic
} else {
    // perform iPhone logic
}