2012-10-31 8 views
9

Opracowywałem wszystko z plikami xib, ponieważ potrzebowaliśmy wsparcia dla iOS4.Czy storyboardy zmuszają Cię do napisania brzydkiego kodu?

Teraz wreszcie wspieranie tylko iOS5 i iOS6, więc postanowiłem dać storyboardy spróbować, więc wszystko jest w porządku i łatwe, ale znalazłem się robi dużo kodu tak:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"AddPlayer"]) { //Ugly 

     UINavigationController * navigationController = segue.destinationViewController; 
     PlayerDetailViewController * playerDetailsViewController = [navigationController viewControllers][0]; //Super Ugly 
     playerDetailsViewController.delegate = self; 
    } 
} 

Nie wiem jak wy, ale uważam, że ten kod jest bardzo brzydki i podatny na błędy.

Czy istnieje lepszy sposób pracy z Storyboard? Czy powinienem wrócić do plików xib?

+0

mógłbyś wyjaśnić dlaczego mówisz brzydkie? Czy odnosisz się do porównania dla instrukcji if? –

+0

Nie tak brzydko myślę :) po prostu nietypowe – NeverBe

+1

Znalazłem naprawdę brzydki fakt, że trzeba wprowadzić losowe ciągi w storyboardie, a następnie zacząć robić porównania, dla mnie jest bardzo nie do zdobycia, sprzężony i podatny na błędy. To samo dotyczy przechodzenia przez hierarchię kontrolerów. – Ecarrion

Odpowiedz

6

Dużo pracowałem z Storyboardami w ostatniej aplikacji, którą zbudowaliśmy, gdzie pracuję i tak, zgadzam się, że kod na tablicy staje się dość irytujący po pewnym czasie, ale o ile wiem, używanie prepareForSegue jest jedynym sposobem na przekazanie parametrów podczas używania segues. Nie można przypisywać właściwości/delegatów do niestandardowego kontrolera widoku z poziomu samej Story.

  • Chciałbym wrócić do korzystania XIB użytkownika gdybym tylko kierować iOS 5 & 6? To zależy od.

Gdybym miał zbudować małą - średnią aplikację (niezbyt wiele widoków i nie wiele między nimi) zdecydowanie korzystałbym ze scenorysów. Ale kiedy masz dużo widoków i dużo nawigacji między nimi, naprawdę trudno jest utrzymać porządek w Storyboard i czujesz się jakbyś zmusił się do użycia czegoś, co w rzeczywistości nie jest najlepsze.

Z drugiej strony uważam, że Storyboardy znacznie ułatwiają odczucie przepływu i ogólnego wyglądu aplikacji podczas uruchamiania od zera, a można nawet użyć ich do stworzenia makiet, które będą wyglądać jak prawdziwa rzecz.

W gruncie rzeczy sprowadza się to do twoich potrzeb podczas rozpoczynania projektu.

EDIT:

Inną rzeczą, aby wziąć pod uwagę: jeśli używasz SVN/Git lub innych VCS pracować z zespołem, Storyboard Konflikty plików są całkowity suka.

+2

+1 dla pliku kontroli wersji konflikt z Storyboards. Czy Apple nie uważał, że wiele osób może po prostu edytować edytor? Geez –

+0

Miałem tak wiele problemów z naprawianiem konfliktów scenopisów ... aby je ponownie znaleźć w następnym zatwierdzeniu – jere

2

To tylko natura bestii. Objective-C używa konwencji Cocoa produkuje - (miejmy nadzieję) własny dokumentowanie, aczkolwiek w pełnym kodzie. Patrząc na twój przykład, nie mam żadnych problemów z określeniem twojego zamiaru.

Teraz, jeśli chcesz sprawić, że będzie ładna, możesz zamknąć to wszystko w makrze, dzięki czemu zostanie on skondensowany do jednej linii. Chociaż może być ładniej zobaczyć, to z pewnością dodać niepotrzebną złożoność w utrzymaniu bestii. Użytkownik końcowy nie dba o to, jak ładny jest kod - chyba, że ​​uniemożliwia dodanie nowych funkcji.

Jeśli chodzi o omawianie scenariuszy ... z pewnością są inne, ale korzystam z nich już od sześciu miesięcy, bardzo doceniam posiadanie wszystkich końcówek w jednym, scentralizowanym miejscu zamiast spędzania czasu na szukaniu pojedynczych plików. O wiele łatwiej jest mi znaleźć rzeczy za pomocą układów graficznych, a następnie analizować nazwy plików wielbłądów. To tylko ja.

Moja rada, daj im czas. Za kilka miesięcy, jeśli uznasz, że hamują twój przepływ pracy, to w jakikolwiek sposób powróć do poszczególnych stalówek. Nigdzie się nie wybierają. Przynajmniej przez chwilę.

Tylko moje dwa centy. Powodzenia!

+1

I Zgadzam się co do samego produktu, co jest ważne dla końcowego użytkownika, ale jako inżynier muszę się martwić o wiele więcej rzeczy niż tylko ostateczny produkt. – Ecarrion

5

Zgadzam się, że jest brzydki kod i wygładzić moją wizję stworzyłem makro:

#define WhenSegueIdentifierDo(segueIdentifier, block) if([segue.identifier isEqualToString:segueIdentifier]) block(); 

iw moim prepareForSegue:

WhenSegueIdentifierDo(kModalVC1ToVC2,^
{ 
    //code 
}); 

WhenSegueIdentifierDo(kModalVC1ToVC3,^
{ 
    //code 
}); 

ja również używać stałych zamiast jawnie wpisanej ciągi (chociaż nie mogę ich użyć na storyboardzie), żeby było piękniej. Używam również konwencję: k + rodzaj przejścia + pochodzenie nazwy widok kontroler + do + widok docelowy nazwa kontrolera.

Można również użyć

navigationController.topViewController 

zamiast

[navigationController viewControllers][0]; 

Tylko moje 2 centy ...

+0

To podejście blokowe jest w rzeczywistości całkiem zadbane, ale zdecydowałem się trzymać stalówki/śliwki. Nie podoba mi się pomysł posiadania wszystkich moich widoków w jednym pliku. To bardzo nieosiągalne duże zespoły! – Ecarrion

+0

całkiem fajne makro! – jere

Powiązane problemy