我是新來的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