没有Storyboard和ARC的Xcode


116

我已经下载了新的xcode-5并开始使用它。

我们可以直接创建应用程序,包括情节提要和ARC,它不需要像早期版本那样的选项。

因此,我的问题是,如何在没有ARC和情节提要的情况下使用xcode5。我们必须手动删除情节提要文件?还是有其他选择。


3
没有人能真正回答这个问题,但我认为Apple之所以这样做,是因为Storyboard和ARC都是使用Xcode或Objective-C开发应用程序的未来。由于Xcode 5仍然是beta版,可能是他们在今年晚些时候增加了对它的支持,但我认为这不会发生。
2013年

6
手动删除情节提要文件,并-fobjc-arc在项目设置中删除编译器标志。

19
有关程序员主要使用的工具的问题非常多,只要他们不要求“最佳”的东西或“购物”的建议即可。我已经相应地重新打开了它。
Tim Post

1
但这不是这样做的适当位置。明白了。
MZimmerman6

3
在NDA下进行此操作的唯一内容是“ Xcode 5”部分。实际描述的任何事情都可以在Xcode的早期版本上完成,因此从技术上讲,这个主题可以自由讨论。
AtomRiot 2013年

Answers:


150

使用Empty应用程序创建一个项目并添加任何viewcontroller(我在此处添加了TestViewController)

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
 {
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   // Override point for customization after application launch.
   TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
   UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
   self.window.rootViewController = nav;
   [self.window makeKeyAndVisible];
   return YES;
 }

移除弧的步骤

1)在构建设置中,将“ 自动参考计数”设置为NO

///////////////////////////////////////////////////// /////////////////////////结束//////////////////////// ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// ////////////////////////

如果您已经使用情节提要ARC创建了应用程序,则

删除故事板的步骤

1)从您的项目中删除Main.storyboard文件。

2)使用xib为您的控制器添加新文件,如果在构建阶段未将其添加到已编译的源代码中,请手动添加。

3)plist中删除Main Storyboard文件的基本名称

4)更改appdelegate didFinishLaunchingWithOptions文件并添加:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

[self.window makeKeyAndVisible];

就像 :

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

     // Override point for customization after application launch.

     TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
     UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
     self.window.rootViewController = nav;
     [self.window makeKeyAndVisible];

     return YES;
}


现在,在上面的示例中,您必须手动管理内存管理,例如

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

 [test release]; 

移除弧的步骤

1)在构建设置中,将“ 自动参考计数”设置为NO


7
不再有“空项目”选项了吗?我不认为我会开始使用故事板。
苏珊(Sulthan)2013年

1
确保将目标的“主界面”设置更改为新的根<View Controller>。
Paul Brady 2013年

你是对的@Sulthan,我们可以通过空项目来完成,但是如果我已经创建了基于视图的应用程序,那么这些就是更改。(我们必须从appDelegate文件中手动删除一些故事板代码),而在空应用程序中,我们必须在其中添加新代码:)
PJR 2013年

我遇到了一个脚本,该脚本将添加删除故事板的选项:stackoverflow.com/a/19792955/329928
克里斯·莱瓦

为什么不自动释放UINavigationController * nav?并且我们应该在[UIWindow alloc]中使用_window?
hariszaman 2014年

44

您可以使用Empty Application模板创建一个新项目,而不是删除情节提要文件。这样就可以避免创建情节提要文件。

使用以下步骤可以省略情节提要: 在此处输入图片说明

  1. 使用空应用程序模板创建一个新项目。
  2. 添加一个新的viewController(例如:LoginViewController
  3. 更改didFinishLaunchingWithOptionsAppDelegate.m下面为指定的文件。

改成:

#import "LoginViewController.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

删除ARC: 转到构建设置-> Objective-C自动引用计数->否


1
哇!就像魅力一样工作,比接受的答案简单得多。我只需要确保将所有引用更改LoginViewController为匹配我自己控制器的名称即可。
约翰·K

11

创建新项目

![创建新项目]

在信息中删除Main Storyboard文件的基本名称

//删除Info中的主Storyboard文件库名称

在appdelegate中添加此代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

然后自动删除情节提要。

请尝试...成功执行。谢谢


5

快捷方式:我更喜欢

在xcode4中创建没有Storyboard和ARC的项目,然后在xcode5中打开该项目。


1
仅为此保留旧版本的Xcode是不值得的。我宁愿创建一个新项目,摆脱Storyboard的东西,在appDelegate中添加UIWindow实例化并将其另存为模板项目,以供以后使用。
kervich 2014年

3

创建新项目时,Xcode 4具有“使用情节提要”复选框。可以获取旧的Xcode 4应用程序模板(XML文件)并将其转换为Xcode5。这样,您将获得旧的模板,可以选择是否需要情节提要。


我写了一个脚本,可以为您完成所有工作: https : //github.com/jfahrenkrug/Xcode4templates


运行脚本后,在“新建项目”屏幕中将有一个“ Xcode 4”部分:

在此处输入图片说明

然后-las!-您将获得自己心爱的选择:

在此处输入图片说明

您需要http://developer.apple.com/ios上的Xcode 4 .app软件包的副本才能使用此脚本。


1
但是,这些模板很旧,无法利用所有可用的新更改,例如-registerClass:forCellReuseIdentifier:。
mahboudz 2014年

@mahboudz是的。您需要调整一下该功能是否对您很重要。当然,我希望苹果公司能够在Xcode的未来版本中重新选择退出Storyboard。
Johannes Fahrenkrug 2014年

1
但愿如此。像您一样,我在较小的应用程序中使用Storyboard,主要是由于TableView快速开发,但在较大的应用程序中,Storyboard是一个主要的难题。从滚动浏览到记住标记ID(必须添加一种在故事板和源文件之间使用#defines或const NSString *的方法),进行git冲突解决等等,故事板还不是全部,并且全部结束。
mahboudz 2014年

那些V / A箭头。
约翰·里塞尔瓦托

1
@JohnRiselvato你是对的:)令人讨厌的箭头现在不见了:)
Johannes Fahrenkrug 2014年

0

我有一个提示:

  1. 第一:我使用XCode 4.6创建我的项目(因为该版本最接近XCode 5)。
    • 当然,对于XCode 4.6,您可以选择使用还是不使用ARC,Storyboard。
  2. 第二个:之后,我将使用XCode 5打开我的项目。=>我认为Xcode 5将了解该项目正在使用nonARC,并且当然没有Storyboard。

希望您的项目能够成功!:D

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.