TableViewSuite App的项目类型是什么类型

时间:2011-09-30 11:12:48

标签: iphone objective-c ios xcode

我正在从理论转向一些实践。我从Apple网站下载了几个示例代码。第一个应用程序是来自

的TableViewSuite

https://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html

看起来很漂亮和有吸引力。我最喜欢的是以编程方式掌握.nib文件。我试着重复这个应用程序,但是亲爱的,选择什么样的项目?

  1. 基于导航的应用程序
  2. 基于视图的应用
    1. 基于窗口的应用程序?
    2. 首先,我尝试了基于窗口的应用程序,它承诺

        

      此模板为任何应用程序提供了一个起点。它只提供了一个应用程序委托和一个窗口。

      听起来不错。只是窗口和委托,但当我开始编写代码时,我遇到了这样的困境。在Apple的代码中,我必须首先实现用表视图公开nib文件

      - (void)applicationDidFinishLaunching:(UIApplication *)application {
      
      /*
       Create and configure the navigation and view controllers.
       */ 
      
      RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
      
      // Retrieve the array of known time zone names, then sort the array and pass it to the root view controller.
      NSArray *timeZones = [NSTimeZone knownTimeZoneNames];
      rootViewController.timeZoneNames = [timeZones sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
      
      UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
      self.navigationController = aNavigationController;
      [aNavigationController release];
      [rootViewController release];
      
      // Configure and display the window.
      [window addSubview:[navigationController view]];
      [window makeKeyAndVisible];
      

      }

      这种方法对我来说很清楚。我的意思是它对我来说很明显。在我的应用程序中,此方法以完全不同的方式实现。

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      

      它返回BOOL而不是返回void并且没有得到(UIApplication *)应用程序参数,我无法用样式初始化RootViewController。

      那么,我应该选择什么样的项目?请帮助我。提前完成。

2 个答案:

答案 0 :(得分:0)

对于要使用的项目类型,我认为选择基于Window的应用程序是一个很好的起点。正如你所说,它是一个窗口和一个代表,这些都是必需品。

此方法:

  • (void)applicationDidFinishLaunching:(UIApplication *)application

实际上用于旧版本的iOS。你应该使用:

  • (BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这个方法基本上做同样的事情,除了它需要两个参数而不是1.第一个是UIApplication(就像第一个方法一样)。第二个参数是一个字典,它告诉你应用程序启动的原因(从跳板打开,由于执行推送通知而打开等)。

对于返回值,您可能希望在刚开始时返回NO。如果您的应用程序要处理URL资源,那么您可能需要重新实现它,以便它在选项字典中查看应用程序是否正在启动,因为用户正在尝试打开您的应用程序声称的文件或资源支持(在这种情况下,您将返回YES)。

不应该使用上面发布的代码。您只需要添加一个返回值。不应该阻止你初始化你的UINavigationController或你的RootViewController(我假设它是UITableView的子类)。

答案 1 :(得分:0)

嘿nathan这两种方法都是一样的。 如果您缺少application实例,则可以使用[UIApplication sharedApplication]创建它,因为这是一个单例并且每次都会返回相同的实例。 如果您是iPhone新手,那么首先选择View Based,然后选择基于导航的应用程序,最后选择基于窗口的应用程序。
关于上述两种方法,在早期版本的iOS中使用了- (void)applicationDidFinishLaunching:(UIApplication *)application方法来初始化应用程序并准备运行。在iOS 3.0及更高版本中,您应该使用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions代替。 这些是直接来自苹果文档的行,你可以检查here

这两种方法的区别在于,当您的应用程序由于本地/推送通知而启动时,将调用方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions并将字典作为启动选项传递。所以使用这个而不是其他。


关于上面下载的代码,它是一个基于导航的应用程序。