#015: Die UINavigationBar (45:15 Minuten)

#015: Die UINavigationBar
Konsequent denken wir den Ansatz der vorausgehenden Folge weiter: Wie blende ich einen neuen View ein, wenn der Anwender auf eine Zelle des UITableView geklickt hat? UINavigationsBar ist dabei unser Freund. Neben Klassen für den neuen View und die anzuzeigenden Daten schauen wir uns noch einiges mehr an:
- NSMutableArray als veränderbares NSArray
- @property / @synthesize als Accessor-Methoden
- Ein Abkürzung für Outlets und Actions im Interface Builder
Trackbacks:
http://www.mac-talk.eu/entwickler/71-videotutorials-zu-objective-c.html
24 Kommentare | Permalink | Trackback-Info | Film in HD ansehen!

Anzeige / Partnerlink

Kommentar hinzufügen

 
Name:
Email (optional):
Text:
Sicherheitscode:
Bitte geben Sie hier die unten abgebildete 5-stellige Zahl aus dem Bild ein!
Um die 1 besser von der 7 unterscheiden zu können, hat die 1 unten immer einen waagerechten Strich.

24. Oli am 16. Jul 2010, 17:11 Uhr

und nochmal ich.
Der Fehler saß wie immer vor dem Display.
Problem ist gefunden und behoben!

Gruß
Oli

23. Oli am 16. Jul 2010, 16:57 Uhr

Also ich arbeite mich auch grade durch eure Podcasts und bekomm hier beim erstellten Programm ein sonderbares Verhalten.
Der erste Touch auf einen Namen funktioniert, auch das Back zu "Addresses" passt. Wenn ich jedoch auf einen anderen Namen drücke, stürzt das Teil ab, im Debugger sehe ich folgende Fehlermeldung:

2010-07-16 16:41:56.587 Addresses[3285:207] -[__NSCFType setAddress:]: unrecognized selector sent to instance 0x5f36e00
2010-07-16 16:41:56.656 Addresses[3285:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType setAddress:]: unrecognized selector sent to instance 0x5f36e00'
*** Call stack at first throw:
(
0 CoreFoundation 0x0238e919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x024dc5de objc_exception_throw + 47
2 CoreFoundation 0x0239042b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x02300116 ___forwarding___ + 966
4 CoreFoundation 0x022ffcd2 _CF_forwarding_prep_0 + 50
5 Addresses 0x00002d63 -[RootViewController tableView:didSelectRowAtIndexPath:] + 133
6 UIKit 0x00324718 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
7 UIKit 0x0031affe -[UITableView _userSelectRowAtIndexPath:] + 219
8 Foundation 0x00031cea __NSFireDelayedPerform + 441
9 CoreFoundation 0x0236fd43 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
10 CoreFoundation 0x02371384 __CFRunLoopDoTimer + 1364
11 CoreFoundation 0x022cdd09 __CFRunLoopRun + 1817
12 CoreFoundation 0x022cd280 CFRunLoopRunSpecific + 208
13 CoreFoundation 0x022cd1a1 CFRunLoopRunInMode + 97
14 GraphicsServices 0x02f822c8 GSEventRunModal + 217
15 GraphicsServices 0x02f8238d GSEventRun + 115
16 UIKit 0x002c0b58 UIApplicationMain + 1160
17 Addresses 0x00002480 main + 102
18 Addresses 0x00002411 start + 53
)
terminate called after throwing an instance of 'NSException'


Hat jemand ne Idee, was da nicht passt?

Gruß
Oli

22. ingo am 17. Mar 2010, 11:50 Uhr

@dorian:
Was genau heisst denn, dass sie nicht läuft? Startet der Film bei Dir nicht? Oder gibts Probleme mit Xcode?

21. dorian am 14. Mar 2010, 18:21 Uhr

Hallo,

ausgerechnet diese Folge läuft bei mir nicht, während alle anderen ganz brav funktionieren... keine Fehlermeldungen vorhanden, bin ratlos. Hat vielleicht jemand eine Idee, woran das liegen könnte?

Danke und beste Grüße
dorian

20. JP am 5. Nov 2009, 21:55 Uhr

Nochma zu Core Data. Wie mach ich da aus nem timestamp was anderes??

19. Christian am 2. Nov 2009, 19:56 Uhr

Also, das war wirklich super-hilfreich! Lerne seit einigen Monaten Mac-/iPhone Programmierung.
Manche Kleinigkeiten habe ich erst jetzt durch Euer Filmchen verstanden. Danke Danke Danke!
Ihr habt einen neuen Fan gewonnen. Ich schau jetzt auch mal Eure weiteren Werke an, bin sehr gespannt...

18. OnkelHeinz am 1. Nov 2009, 19:40 Uhr

wünsche mir lieber podcasts für mac-dev nicht iphone/pod

aber das ist ja warscheinlich geschmackssache ;)

17. Nostradamus am 29. Oct 2009, 10:55 Uhr

Hui,

guter PodCast, aber den Code muss ich mir erstmal ausdrucken um einen Überblick über die vielen Einzelteile zu bekommen.

Ich freue mich auf die nächste Woche!
Ist da mal wieder eine Spende nötig !? ;-)

16. M.F. am 27. Oct 2009, 22:36 Uhr

Ach, einen Tipp habe ich noch vergessen. Ihr zuppelt Euch ja bei jedem neu erstellten Projekt erst mal alles zurecht. Schaut Euch mal im Menü „Window“ den Punkt „Defaults…“ an.

15. M.F. am 27. Oct 2009, 22:20 Uhr

So, da bin ich mal wieder, der kleine „Meckerer“. ;)
Schön, dass Ihr wenigstens mal erwähnt, dass Methoden und Funktionen zwei verschiedene Paar Schuhe sind, aber das ist in dieser Folge nicht das Problem. Da gab es ein paar andere Baustellen. Hier mal ein paar Anmerkungen:

1.) initWithNibName:bundle: lädt auch heute noch nib-Dateien, keine xib-Dateien. xib-Dateien werden beim Compilieren des Projekts nämlich zu nib-Dateien compiliert.

2.) Die Erklärung zu 'nonatomic' ist schlicht falsch. 'nonatomic' sagt nichts darüber aus, ob es sich um ein Objekt handelt oder nicht, sondern es sagt aus, ob eine Property thread-safe ist oder nicht. Deshalb hat man das Attribut eben auch nicht 'object' genannt.

3.) Erklärung zu Deklaration/Definition. Das kenne ich genau anders herum, als in dieser Folge erklärt und das Internet scheint der gleichen Meinung zu sein. :)

4.) Verwendung von 'NULL'. 'NULL', 'nil' und 'Nil' sind zwar im Endeffekt alles dasselbe, ich würde aber trotzdem bei Instanzen 'nil', bei Klassenobjekten 'Nil' und bei allen anderen Zeigern 'NULL' verwenden. Einfach der besseren Übersicht wegen. Man weiß dann nämlich, mit was man es zu tun hat. Objekt, Klassenobjekt oder halt was anderes (z.B. Struktur).

Ich könnte noch ein paar Kleinigkeiten aufführen, aber lassen wir das mal für heute. :)

14. ReggaePanda am 27. Oct 2009, 22:04 Uhr

Also wenn du so Linien ziehst, wird das nicht mit im Controller mit reingeschrieben wie wenn du Actions und Outlets im IB hinzufügst und dann schreibst. Das kann man aber auch Programmtechnisch umsetzen, aber ist für den aktuellen stand noch zu viel. Lieber erstmal einfach halten. ;)

13. Santi am 27. Oct 2009, 13:04 Uhr

Tempo ganz schön gesteigert! Find ich super.
Ich hab weniger Mühe das Programatische zu verstehen (wie NSArray und so) wie den Interface Builder. Irgendwie werden da Linien von A nach B gezogen und dann funktioniert was. Wird das irgendwo im Code ersichtlich? So wie die Outlets?

Freu mich schon auf den nächsten!

12. Manuel am 25. Oct 2009, 19:51 Uhr

ah, okay... ^^
also lieber NULL als nil verwenden...

(währ ganz cool, wenn ihr das im nächsten video mal so 21 Sekunden erwähnt, weil in allen tutorials die ich bis jetzt gelesen habe immer nil stand. Ist vielleicht ganz hilfreich, wenn man sich dann mit anderen tutorials beschäftigt.)

lg
ja der ReggaePanda
PS: bleib demnächst lieber dabei weil hier ist ja noch ein anderer Manuel unterwegs :D

11. ichbin007 am 25. Oct 2009, 19:31 Uhr

Zu deiner Frage Manuel:

Nil ist ein Null Pointer für (Objective-)C Klassen.
nil ist ein Null Pointer für (Objective-)C Objekte.
NULL ist ein Null Pointer für alles Andere (einschließlich nil und Nil)

Heißt NULL ist Universal. So habe ich das zumindest in Informatik gelernt.

10. Manuel am 25. Oct 2009, 19:25 Uhr

Hay, klasse Podcast mal wieder ;)

Aber mal ne einfache frage und wahrscheinlich bekomm ich auch eine einfache Antwort....

Aber wo ist der unterschied zwischen "NULL" und "nil"...
hab jetzt erst in diesem Podcasts NULL gesehen und sonst an gleicher stelle immer nil

lg
Manuel

9. peter am 25. Oct 2009, 19:01 Uhr

@J-P:
Core Data hilft viel, aber wir wollen ja auch das Prinzip einiger Sachen erklären. In der Fahrschule lernt man ja auch das rückwärts Einparken in mehreren Versionen ;)

Und zum iPhone Spiel: wenn wir nicht beide jeden Tag 8 Stunden arbeiten müssten, sondern den Podcast als Haupterwebsquelle betreiben würden, könnten wir auch jeden Tag eine neues Video herausbringen. Wir haben selbst so viele Ideen was man alles machen könnte - ein iPhone Spiel wäre auch dabei. Ach die liebe Zeit ...

Peter

8. J-P am 25. Oct 2009, 18:54 Uhr

Achja könntet ihr vieleicht mal ein iPhone Spiel coden??

7. J-P am 25. Oct 2009, 18:48 Uhr

Hey ihr beiden. Ich hab nen Tipp wie man ne TableView ohne großes Code schreiben machen kann. Also ihr müsst einfach beim Auswahlbildschirm (wo man auswählen kann was man für ne Applikation machen will) muss man einfach einen Haken setzen bei: Use Core Data for storage.

Viele Grüße J-P

6. peter am 25. Oct 2009, 13:20 Uhr

@risetothesky:

Ja, Forum ist genau das Richtige ;)

Du übergibst dem TableView, in dem die Stunden angezeigt werden sollen das Array mit den Stunden. Ist dann von der Handhabung ähnlich wie das RootView.

Peter

5. risetothesky am 25. Oct 2009, 13:07 Uhr

@peter:
ich möchte eben einen Stundenplan basteln, bei dem ich im RootView (TableView) die Tage (Montag - Freitag) sehe, und wenn ich einen Tag anklicke bekomme ich in einem TableView die Stunden angezeigt..
Wie realisiere ich das am besten?
(Die Diskussion wäre eigentlich im Forum besser aufgehoben fällt mir gerade auf)

4. peter am 25. Oct 2009, 12:42 Uhr

@risetothesky:
Dann musst Du explizit die Felder im Array ansprechen. Und weil das mehr Aufwand bedeutet, ist es eher nicht empfehlenswert. Du baust ein Array, das alle Adressen in Form von Objekten enthält.
Wenn Du in unserem Beispiel eine Adresse ausliest (z.B. den Vornamen address.firstName) sprichst Du ja das Objekt an. Wenn Du jetzt in dem Objekt selbst ein Array mit den Daten einbaust, ist das doppelt gemoppelt.

Peter

3. risetothesky am 25. Oct 2009, 12:27 Uhr

Ja ich schaus mir jetzt nochmal an!
Naja es ist halt viel neues was man da eingedrückt bekommt ;) aber ich denke das wird sich gleich alles klären...
Wie kann ich es eigentlich machen, dass wenn ich keine NSStrings in die Adresses einfüge sondern NSArrays bzw NSMutableArray, ich verstehe nicht ganz, wie ich dann darauf zugreifen kann...

2. peter am 25. Oct 2009, 11:33 Uhr

@risetothesky:

Nochmal anschauen ;)

Im Ernst: inwiefern gabs Verständnisprobleme?

Peter

1. risetothesky am 25. Oct 2009, 11:27 Uhr

Super folge, mit viel Content! Habe jetzt beim ersten Schauen nicht alles verstanden, um genau zu sein relativ wenig, aber ich denke dass kommt wenn ich's selbst probiere...