Xcode без аркушів розгортки та ARC


116

я завантажив новий xcode-5 і тільки почав його використовувати.

Ми можемо створювати додатки безпосередньо, включаючи розкадровку та ARC, не вимагаючи варіантів, як попередні версії.

Отже, моє питання полягає в тому, як ми можемо використовувати xcode5 без ARC та розгортки. нам доведеться вручну видалити файл раскадровки? чи є якийсь інший варіант.


3
На це ніхто не може відповісти, але я думаю, що Apple зробила це тому, що і Storyboards, і ARC - це майбутнє в розробці додатків з Xcode або в Objective-C. Оскільки Xcode 5 все ще є бета-версією, можливо, вони додадуть підтримку для цього пізніше цього року, але я думаю, це не відбудеться.
ВІН

6
Видаліть файл аркуша вручну та видаліть -fobjc-arcпрапор компілятора в налаштуваннях проекту.

19
Питання щодо інструментів, які в основному використовуються програмістами, є дуже тематичними , за умови, що вони не запитують "найкращих" рекомендацій чи "шопінгу". Я відповідно відновив це.
Tim Post

1
Але це не належне місце для цього. Розумієте це.
MZimmerman6

3
Єдине, що робить це під NDA, це частина слів "Xcode 5". все, що насправді описано, можна зробити на попередніх версіях Xcode, тому технічно ця тема вільна для обговорення.
AtomRiot

Відповіді:


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

КРОКИ ДЛЯ Зняття АРК

1) У налаштуваннях збірки встановіть автоматичний відлік посилань на НІ .

////////////////////////////////////////////////// ///////////////////////// END //////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////

Якщо ви вже створили додаток із раскадровкою та ARC, тоді

КРОКИ ДЛЯ ВІДКРИТТЯ РОБОТИ

1) Видаліть файл з файлу Main.storyboard зі свого проекту.

2) Додайте нові файли з xib для свого контролера, якщо він не додається до складених джерел у фазах збірки, тоді додайте їх вручну.

3) Видаліть основну назву файлу основної розкадрівки із списку .

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) У налаштуваннях збірки встановіть автоматичний відлік посилань на НІ .


7
Хіба вже немає варіанту "порожній проект"? Я не думаю, що я кожного разу почну використовувати розповіді.
Султан

1
Не забудьте змінити налаштування "Основного інтерфейсу" на ваш новий коренеп <Переглянути контролер>.
Пол Брейді

Ви маєте рацію @Sulthan, ми можемо це зробити пустим проектом, але це зміни, якщо я вже створив додаток на основі перегляду. (ми повинні видалити якийсь код розкадровки вручну з файлу appDelegate), поки в порожній додаток ми повинні додати новий код у нього :)
PJR

Я натрапив на сценарій, який додасть можливість видалити назад аркуші
Кріс Лейва

Чому UINavigationController * nav не виходить автоматично? і ми повинні використовувати _window в [UIWindow alloc]?
hariszaman

44

Замість того, щоб видалити файл розкадровки, ви можете створити новий проект із шаблоном Порожня програма. Щоб ви могли уникнути створення файлу розкадровки.

Скористайтеся наступними кроками, щоб опустити табло: введіть тут опис зображення

  1. Створіть новий проект із шаблоном Порожня програма.
  2. Додати новий ViewController (приклад: LoginViewController)
  3. Зміна didFinishLaunchingWithOptionsв 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

11

створити новий проект

! [Створити новий проект]

видалити основну назву файлу основної розкадрівки в Інфо

// видаліть базове ім'я основного файлу розкадрівки в Інфо

Додайте цей код у додатку

- (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

Я віддаю перевагу

Створіть проект без Storyboard та ARC у xcode4, а потім відкрийте цей проект у xcode5.


1
Триматися за старішою версією Xcode тільки для цього не варто. Я вважаю за краще створити новий проект, позбутися матеріалів Storyboard, додати екземпляр UIWindow в appDelegate і зберегти його як шаблонний проект для подальшого.
кервич

3

Під час створення нового проекту Xcode 4 мав прапорець "Використовувати дошки розказок". Можна захопити старі шаблони додатків Xcode 4 (XML-файли) та перетворити їх у Xcode 5. Таким чином, ви отримуєте старі шаблони назад, які дозволяють вам вибрати, хочете ви, чи ні.


Я написав сценарій, який працює для вас: https://github.com/jfahrenkrug/Xcode4templates


Після запуску сценарію на екрані "Нового проекту" з'явиться розділ "Xcode 4":

введіть тут опис зображення

А далі - На жаль! - ви отримуєте назад улюблений вибір:

введіть тут опис зображення

Вам потрібна копія пакету Xap 4 .app з http://developer.apple.com/ios, щоб використовувати цей скрипт.


1
Однак ці шаблони давні і не користуються всіма новими доступними змінами, такими як -registerClass: forCellReuseIdentifier :.
mahboudz

@mahboudz Це правда. Вам потрібно налаштувати це, якщо ця функціональність важлива для вас. Звичайно, я сподіваюся, що Apple поверне можливість вимкнути дошки сповіщень у майбутньому випуску Xcode.
Йоханнес Фаренкруг

1
Я так сподіваюся. Як і ви, я використовую Storyboard у менших додатках, в основному через швидку розробку TableView, але у великих програмах Storyboard - це головний біль. Від прокручування, до запам'ятовування ідентифікаторів segue (вони повинні додати спосіб використання #defines або const NSString * між дошками розкадрів та вихідними файлами), до вирішення конфлікту git та інше, Storyboards просто не все і закінчити все.
mahboudz

ті стрілки V / A, хоча.
Джон Різельвато

1
@JohnRiselvato Ви маєте рацію :) Потворних стрілок вже немає :)
Йоханнес Фаренкруг

0

У мене є порада:

  1. Перший: я створюю свій проект XCode 4.6 (оскільки ця версія найближча до XCode 5).
    • Звичайно, що за допомогою XCode 4.6 ви можете використовувати або не використовувати ARC, Storyboard.
  2. Друге: Після цього я відкрию свій проект з XCode 5. => Я думаю, що Xcode 5 зрозуміє, що проект використовується nonARC, і, звичайно, не має Storyboard.

Сподіваюся, ваш проект спрацює! : D

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.