Xcode bez Storyboard i ARC

116

pobrałem nowy xcode-5 i właśnie zacząłem go używać.

Możemy stworzyć aplikację bezpośrednio zawierającą storyboard i ARC, nie jest to prośba o opcję jak wcześniejsze wersje.

Więc moje pytanie brzmi: jak możemy używać xcode5 bez ARC i storyboardu. musimy ręcznie usunąć plik storyboardu? czy jest jakaś inna opcja.

PJR
źródło
3
Nikt nie może naprawdę odpowiedzieć na to pytanie, ale myślę, że Apple to zrobił, ponieważ zarówno Storyboardy, jak i ARC to przyszłość w tworzeniu aplikacji w Xcode lub w Objective-C. Ponieważ Xcode 5 jest nadal wersją beta, może się zdarzyć, że dodadzą obsługę go jeszcze w tym roku, ale myślę, że tak się nie stanie.
MAJ
6
Usuń ręcznie plik scenorysu i usuń -fobjc-arcflagę kompilatora w ustawieniach projektu.
19
Pytania dotyczące narzędzi, z których korzystają przede wszystkim programiści, są bardzo na temat , pod warunkiem, że nie pytają o „najlepsze” coś lub rekomendacje „zakupowe”. Odpowiednio ponownie to otworzyłem.
Tim Post
1
Ale to nie jest właściwe miejsce do tego. Rozumiem to.
MZimmerman6
3
jedyną rzeczą, która sprawia, że ​​to w ramach umowy o zachowaniu poufności, są słowa „Xcode 5”. wszystko, co zostało faktycznie opisane, można zrobić w poprzednich wersjach Xcode, więc technicznie ten temat można omówić.
AtomRiot,

Odpowiedzi:

150

Utwórz projekt z pustą aplikacją i dodaj dowolny kontroler widoku (dodałem tutaj 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;
 }

KROKI W CELU USUWANIA ŁUKU

1) W ustawieniach kompilacji ustaw Automatyczne liczenie referencji na NIE .

////////////////////////////////////////////////// /////////////////////////KONIEC//////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////

Jeśli masz już utworzoną aplikację ze scenorysem i ARC, to

KROKI W CELU USUNIĘCIA TABLICY STORY

1) Usuń plik Main.storyboard z projektu.

2) Dodaj nowe pliki za pomocą xib dla swojego kontrolera, jeśli nie jest dodawane w skompilowanych źródłach w fazach kompilacji, dodaj je ręcznie.

3) Usuń nazwę bazową pliku głównego storyboardu z plist .

4) Zmień plik appdelegate didFinishLaunchingWithOptions i dodaj:

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

[self.window makeKeyAndVisible];

tak jak :

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


Teraz w powyższym przykładzie musisz ręcznie zarządzać pamięcią, np.

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

 [test release]; 

KROKI W CELU USUWANIA ŁUKU

1) W ustawieniach kompilacji ustaw Automatyczne liczenie referencji na NIE .

PJR
źródło
7
Czy nie ma już opcji „pusty projekt”? Nie sądzę, żebym za każdym razem zaczął używać storyboardów.
Sulthan
1
Pamiętaj, aby zmienić ustawienie "Główny interfejs" Targetu na nowy główny <Kontroler widoku>.
Paul Brady,
masz rację @Sulthan możemy to zrobić przez pusty projekt, ale to są zmiany, jeśli już stworzyłem aplikację opartą na widoku. (musimy ręcznie usunąć kod storyboardu z pliku appDelegate) podczas gdy w pustej aplikacji musimy dodać do niej nowy kod :)
PJR
Natknąłem się na skrypt, który doda opcję usuwania scenorysów z powrotem: stackoverflow.com/a/19792955/329928
Chris Leyva,
dlaczego UINavigationController * nav nie jest wydany automatycznie? i powinniśmy używać _window w [UIWindow assign]?
hariszaman
44

Zamiast usuwać plik scenorysu, możesz utworzyć nowy projekt z pustym szablonem aplikacji. Aby można było uniknąć tworzenia pliku storyboardu.

Wykonaj następujące kroki, aby pominąć scenorys: wprowadź opis obrazu tutaj

  1. Utwórz nowy projekt z pustym szablonem aplikacji.
  2. Dodania nowego viewController (przykładowo LoginViewController)
  3. Zmień plik didFinishLaunchingWithOptionsin AppDelegate.m, jak określono poniżej.

Zmień na:

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

Usuń ARC: Przejdź do ustawień kompilacji -> Automatyczne liczenie referencji w celu C -> NIE

Raj Subbiah
źródło
1
Łał! Działa jak urok i znacznie prostsza niż przyjęta odpowiedź. Musiałem tylko upewnić się, że zmieniam wszystkie odniesienia na, LoginViewControlleraby pasowały do ​​nazwy mojego kontrolera.
JohnK
11

utwórz nowy projekt

! [Utwórz nowy projekt]

usuń nazwę bazową pliku głównego storyboardu w Info

// usuń nazwę bazową pliku głównego storyboardu w Info

Dodaj ten kod w 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;
}

Następnie automatycznie usuń swoją scenorys.

Spróbuj tego ... Wykonano pomyślnie. dzięki

Ketan Patel
źródło
5

ShortCut: Wolę

Utwórz projekt bez Storyboard i ARC w xcode4, a następnie otwórz ten projekt w xcode5.

SwapnilPopat
źródło
1
Przechowywanie starszej wersji Xcode tylko w tym celu nie jest tego warte. Wolałbym raczej utworzyć nowy projekt, pozbyć się rzeczy Storyboard, dodać wystąpienie UIWindow w appDelegate i zapisać go jako projekt szablonu na później.
kervich
3

Xcode 4 miał pole wyboru „Użyj scenorysów” podczas tworzenia nowego projektu. Możliwe jest pobranie starych szablonów aplikacji Xcode 4 (pliki XML) i przekonwertowanie ich na Xcode 5. W ten sposób odzyskasz stare szablony, które pozwolą Ci wybrać, czy chcesz tworzyć storyboardy, czy nie.


Napisałem skrypt, który wszystko działa dla Ciebie: https://github.com/jfahrenkrug/Xcode4templates


Po uruchomieniu skryptu na ekranie „Nowy projekt” pojawi się sekcja „Xcode 4”:

wprowadź opis obrazu tutaj

A potem - niestety! - odzyskujesz swoje ukochane wybory:

wprowadź opis obrazu tutaj

Aby korzystać z tego skryptu, będziesz potrzebować kopii pakietu Xcode 4 .app ze strony http://developer.apple.com/ios .

Johannes Fahrenkrug
źródło
1
Jednak te szablony są stare i nie wykorzystują wszystkich nowych dostępnych zmian, takich jak -registerClass: forCellReuseIdentifier :.
mahboudz
@mahboudz To prawda. Musisz to poprawić, jeśli ta funkcja jest dla Ciebie ważna. Oczywiście mam nadzieję, że Apple przywróci opcję rezygnacji ze Storyboards w przyszłej wersji Xcode.
Johannes Fahrenkrug
1
Mam nadzieję. Podobnie jak Ty, używam Storyboard w mniejszych aplikacjach, głównie ze względu na szybki rozwój TableView, ale w większych aplikacjach Storyboard jest głównym problemem. Od przewijania, do zapamiętywania identyfikatorów segue (muszą dodać sposób wykorzystania #defines lub const NSString * między Storyboardami i plikami źródłowymi), do rozwiązywania konfliktów git i nie tylko, Storyboardy po prostu nie są wszystkim i skończ wszystko.
mahboudz
chociaż te strzały V / A.
John Riselvato
1
@JohnRiselvato Masz rację :) Wstrętne strzały zniknęły :)
Johannes Fahrenkrug
0

Mam wskazówkę:

  1. Pierwszy: tworzę swój projekt przez XCode 4.6 (ponieważ ta wersja jest najbliższa XCode 5).
    • Oczywiście w przypadku XCode 4.6 możesz wybrać użycie lub nie używanie ARC, Storyboard.
  2. Po drugie: po tym otworzę mój projekt z XCode 5. => Myślę, że Xcode 5 zrozumie, że projekt używa nonARC i oczywiście nie ma Storyboard.

Mam nadzieję, że Twój projekt zadziała! :RE

Linh Nguyen
źródło