我是新来的Objective-C所以,忍受我。我开始使用Xcode4中的通用应用程序模板并构建了我的应用程序。有一个约定,模板以我试图坚持的方式开始。对于每个View Controller,每个设备类型都有一个主文件和一个子类。例如:在通用应用程序中实例化设备特定视图控制器的正确模式是什么?
Project/
ExampleViewController.(h|m)
- iPhone/
- ExampleViewController_iPhone.(h|m|xib)
- iPad/
- ExampleViewController_iPad.(h|m|xib)
大多数情况下,这是非常方便的。大多数逻辑都在超类中,而子类负责任何特定于设备的实现。
这是我没有得到的部分。有时候我有代码在每个子类中执行相同的,因为我需要为每个设备加载不同的xib。例如:
ExampleViewController_iPhone
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Content *selectedContent = (Content *)[[self fetchedResultsController] objectAtIndexPath:indexPath];
ContentDetailViewController_iPhone *detailViewController = [[ContentDetailViewController_iPhone alloc] init];
detailViewController.content = selectedContent;
detailViewController.managedObjectContext = self.managedObjectContext;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
ExampleViewController_iPad
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Content *selectedContent = (Content *)[[self fetchedResultsController] objectAtIndexPath:indexPath];
ContentDetailViewController_iPad *detailViewController = [[ContentDetailViewController_iPad alloc] init];
detailViewController.content = selectedContent;
detailViewController.managedObjectContext = self.managedObjectContext;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
...注意到,在二审中唯一不同的是,它装载_iPad
版视图控制器。这是必要的,因为iPad
和iPhone
视图控制器被连接到单独的设备特定节点。
这样做的“正确”模式是什么?
UPDATE
我发现this answer有关使用设备修饰符这似乎是它可以在我并不需要一个特定的子类,一个元件的情况下帮助您在加载单独xibs,但仍然赢得了如果我需要实例化特定功能的视图控制器的特定_iPhone
或_iPad
实例,将无济于事。
1对于一个简单的,优雅和很好地解释溶液。正是我需要的。我没有意识到你可以在Objective C中存储一个类引用以备后用,所以你的例子特别有用。谢谢! – markquezada 2011-04-12 18:59:43