ストーリーボードとARCなしのXcode


116

私は新しいxcode-5をダウンロードして、それを使い始めました。

ストーリーボードとARCを含むアプリケーションを直接作成できます。以前のバージョンのようなオプションは必要ありません。

だから、私の質問は、ARCとストーリーボードなしでxcode5をどのように使用できるかです。ストーリーボードファイルを手動で削除する必要がありますか?または他のオプションがあります。


3
誰もこれに実際に答えることはできませんが、ストーリーボードとARCの両方がXcodeまたはObjective-Cでアプリを開発する未来であるので、Appleはそれをしたと思います。Xcode 5はまだベータ版なので、今年後半にサポートを追加する可能性がありますが、それは実現しないと思います。
2013年

6
ストーリーボードファイルを手動で削除-fobjc-arcし、プロジェクト設定でコンパイラフラグを削除します。

19
主にプログラマー使用するツールについての質問は、何かの「ベスト」や「ショッピング」の推奨事項を求めない限り、非常に話題になっています。私はそれに応じてこれを再開しました。
Tim Post

1
しかし、これはそうするための適切な場所ではありません。それを理解してください。
MZimmerman6 2013

3
NDAでこれを行う唯一のものは、「Xcode 5」の部分です。実際に説明されていることはすべて、Xcodeの以前のバージョンで実行できるため、技術的にはこのトピックは自由に議論できます。
AtomRiot 2013

回答:


150

空のアプリケーションでプロジェクトを作成し、ビューコントローラーを追加します(ここに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;
 }

ARCを削除する手順

1)ビルド設定で、自動参照カウントNOに設定します。

////////////////////////////////////////////////// /////////////////////////終わり//////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////

すでに使用したアプリケーション作成している場合はストーリーボードARCの後、

ストーリーボードを削除する手順

1)プロジェクトからMain.storyboardファイルを削除します。

2)コントローラーのxibを使用して新しいファイルを追加します。ビルドフェーズでコンパイル済みソースに追加されていない場合は、手動で追加します。

3)plistからメインストーリーボードファイルのベース名を削除します

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]; 

ARCを削除する手順

1)ビルド設定で、自動参照カウントNOに設定します。


7
「空のプロジェクト」オプションはもうありませんか?ストーリーボードを使い始めるとは思いません。
スルタン2013

1
ターゲットの「メインインターフェース」設定を新しいルート<View Controller>に変更してください。
ポールブレイディ

あなたは正しい@Sulthan私たちは空のプロジェクトでそれを行うことができますが、これらは私がすでにビューベースのアプリケーションを作成した場合の変更です。(appDelegateファイルからストーリーボードコードを手動で削除する必要があります)空のアプリケーションで新しいコードを追加する必要があります:)
PJR

ストーリーボードを削除するオプションを追加するスクリプトに出くわしました:stackoverflow.com/a/19792955/329928
Chris Leyva

UINavigationController * navが自動解放されないのはなぜですか?[UIWindow alloc]で_windowを使用する必要がありますか?
hariszaman 2014

44

ストーリーボードファイルを削除する代わりに、空のアプリケーションテンプレートを使用して新しいプロジェクトを作成できます。ストーリーボードファイルの作成を回避できるようにします。

ストーリーボードを省略するには、次の手順を使用します。 ここに画像の説明を入力してください

  1. 空のアプリケーションテンプレートを使用して新しいプロジェクトを作成します。
  2. (例:新しいのViewControllerを追加LoginViewController
  3. didFinishLaunchingWithOptionsin AppDelegate.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
JohnK 2013年

11

新しいプロジェクトを作成する

![新しいプロジェクトを作成]

情報からメインストーリーボードファイルのベース名を削除

// Infoでメインストーリーボードファイルのベース名を削除します

このコードを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を維持することは価値がありません。新しいプロジェクトを作成し、ストーリーボードの要素を取り除き、UIWindowのインスタンス化をappDelegateに追加して、後で使用できるようにテンプレートプロジェクトとして保存します。
ケルヴィッチ2014年

3

Xcode 4には、新しいプロジェクトを作成するときに「ストーリーボードを使用」チェックボックスがありました。古いXcode 4アプリケーションテンプレート(XMLファイル)を取得してXcode 5に変換することができます。これにより、ストーリーボードが必要かどうかを選択できる古いテンプレートが返されます。


私はあなたのためにすべてのことを行うスクリプトを書きました: https : //github.com/jfahrenkrug/Xcode4templates


スクリプトを実行すると、[新しいプロジェクト]画面に[Xcode 4]セクションが表示されます。

ここに画像の説明を入力してください

そして-ああ!-あなたはあなたの最愛の選択を取り戻します:

ここに画像の説明を入力してください

このスクリプトを使用するには、http: //developer.apple.com/iosからのXcode 4 .appバンドルのコピーが必要です。


1
ただし、これらのテンプレートは古く、-registerClass:forCellReuseIdentifier:などの利用可能なすべての新しい変更を活用していません。
mahboudz 2014年

@mahboudzそれは本当です。その機能が重要である場合は、微調整する必要があります。もちろん、AppleがXcodeの将来のリリースでStoryboardsをオプトアウトするオプションを復活させることを期待しています。
Johannes Fahrenkrug 2014年

1
そうだといい。あなたと同じように、私はストーリーボードを小さなアプリで使用しますが、その主な理由はTableViewの開発が迅速なためですが、大きなアプリでは、ストーリーボードは大きな大きな痛みです。スクロールからセグエIDの記憶(ストーリーボードとソースファイル間で#definesまたはconst NSString *を利用する方法を追加する必要があります)、gitの競合解決など、ストーリーボードはすべてではありません。すべてを終了します。
mahboudz 2014年

これらのV / A矢印です。
John Riselvato 2014

1
@JohnRiselvatoあなたの言うとおりです:)不愉快な矢印はもうなくなりました:)
ヨハネスファーレンクルーグ

0

ヒントがあります:

  1. 1つ目:XCode 4.6でプロジェクトを作成します(このバージョンはXCode 5に最も近いため)。
    • もちろん、XCode 4.6では、ARC、Storyboardを使用するかどうかを選択できます。
  2. 2番目:XCode 5でプロジェクトを開きます。=> Xcode 5はプロジェクトが非ARCを使用していることを理解していると思います。もちろん、ストーリーボードはありません。

あなたのプロジェクトがうまくいくことを願っています!:D

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.