Programmieren mit XCode

  • Ersteller severus
  • Erstellt am

severus

Gast
Mahlzeit =),
ich programmiere schon seit einigen Jahren (Java, c++, c#) und skripte (php, usw).
da ich mir vor einiger zeit einen mac gekauft hab möchte ich auch nun was mac fähiges progammieren, allerdings nicht in java.
wie fang ich denn am besten an? also wichtig ist mir eine einführung in die interfaceprogrammierung mit xcode cocoa objective c.
Grundsätzlich brauche ich nichts was mit oop oder ähnliches erklärt da ich mich damit eigentlich sehr gut auskenne.
Ich hab auch schon hier im Forum gesucht aber das meiste was ich gefunden hab ist eher alt (mitte 2006) das heißt es ist sicher nicht mehr up to date bzw. gibt es sogar einige der links nichtmehr.
Ich hoffe ihr könnt mir dabei weiterhelfen.
Liebe Grüße
Severus
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
First things first: It's Xcode, not xCode or XCode or x-code. Remember that now.
-- Chris Espinosa

Tutorials
Buch

Alex
 

alonzo

Auralia
Registriert
17.03.07
Beiträge
202
Zuletzt bearbeitet:

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Wieso abraten?

Ich wollte heute das durch gehen.
1.
Trotzdem ist es etwas gewöhnungsbedürftig, Objective-C zu schreiben wenn man C++ gewöhnt ist, es gibt durchaus erhebliche Unterschiede. Natürlich nicht in der Programmlogik sondern in der Syntax der Befehle.
Hat er keine Ahnung von
[ ] C++
[ ] Objective-C
[ ] Beidem

2.
Erzeugung von Klassen im IB. (Soll man nicht mehr.)

3.
Kleingeschriebene Klassennamen.

4.
Verwendung deutscher Wörter als Bezeichner.



Alles typische Anfängerfehler, die man daher keinesfalls einem Anfänger beibringen sollte. Mir erscheint das überhaupt so, dass er selbst gerade mit Objective-C angefangen hat und sozusagen seinen Lernerfolg bloggt. Das wird ihm noch viel Arbeit bereiten, wenn er weiter voranschreitet und bemerkt …
 

Nikkita

Gast
1.

Hat er keine Ahnung von
[ ] C++
[ ] Objective-C
[ ] Beidem

2.
Erzeugung von Klassen im IB. (Soll man nicht mehr.)

3.
Kleingeschriebene Klassennamen.

4.
Verwendung deutscher Wörter als Bezeichner.



Alles typische Anfängerfehler, die man daher keinesfalls einem Anfänger beibringen sollte. Mir erscheint das überhaupt so, dass er selbst gerade mit Objective-C angefangen hat und sozusagen seinen Lernerfolg bloggt. Das wird ihm noch viel Arbeit bereiten, wenn er weiter voranschreitet und bemerkt …

Ah ok danke dir :)
 

cyphorious

Braeburn
Registriert
11.05.08
Beiträge
46
das ist mir überhaupt in letzter zeit aufgefallen, dass sogenannte "lehrbücher" immer schlechter werden - egal in welchen programmiersprachen. was die autorInnen da teilweise lehren und präsentieren lässt mir die gänsehaut auftreiben. z.b. beenden einer endlosschleife, die aus einem file ausliest mittels einer exception - was denken sich die leute, wozu es hasNext() (oder ähnliche methoden) gibt?... da stellts mir die nackenhaare auf.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
das ist mir überhaupt in letzter zeit aufgefallen, dass sogenannte "lehrbücher" immer schlechter werden - egal in welchen programmiersprachen. was die autorInnen da teilweise lehren und präsentieren lässt mir die gänsehaut auftreiben. z.b. beenden einer endlosschleife, die aus einem file ausliest mittels einer exception - was denken sich die leute, wozu es hasNext() (oder ähnliche methoden) gibt?... da stellts mir die nackenhaare auf.

Früher war alles besser!

Nein, ernsthaft: Der Markt verlangt nach Neuem. Ich höre ständig: "Wann kommt die nächste Auflage." Wenn ich die E-Mails alle ausdrucken würde, hätten mich die Papierkosten in den Ruin getrieben.

Es sind die Leser, die "Mach's mir und mach's mir schnell!" wollen. Kaum einer nimmt sich noch die Muße, etwas wirklich zu lesen.

Und ja, solche Beispiele gibt es immer. Es gab mal ein Cocoa-Buch, da wurde schmerzfrei -dealloc aufgerufen. Und du findest auch in guten Büchern teilweise merkwürdige Sachen.

Wenn sich dann jemand über _namee anstelle von _name beschwert, grinse ich ein wenig … *Das* sind die zentralen Fragen der Softwareentwicklung.
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Hi Amin!

Habe mir mal dein Tutorial "Absolute Beginner" angesehen und bin das mal durchgegangen. Habe früher mal Java programmiert und bin mit dem Tutorial sehr gut zurecht gekommen.
Eine Frage habe ich allerdings: Ich wollte ein ähnliches Programm schreiben, was eine Tabelle als Grundlage hat und die erste Reihe der Tabelle soll eine laufende Nummer sein. Ich habe bereits ein TableView mit 11 Reihen und diese Reihen jeweils per ArrayController mit dem "Model" verbunden. Allerdings steh ich da gerade auf dem Schlauch.
Ich habe in meiner Controller Klasse ein neues IBOutlet erstellt und dieses mit dem ArrayController verbunden.
Ich dachte, ich könnte dann sowas wie
Code:
[arrayController.arrangedObjects.nummer++];
machen, geht aber nicht...
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Ich dachte, ich könnte dann sowas wie
Code:
[arrayController.arrangedObjects.nummer++];
machen, geht aber nicht...
Das geht nicht, weil Objective-C kein Java ist.;)

Die Syntax von Objective-C ist
Code:
[object message];
In Objective-C 2.0 gibt es neu die Punktsyntax für den "Aufruf" von Accessoren.
Code:
id anObject = object.accessorMessage; // Getter
object.setAccessorMessage = anObject; // Setter
Diese Punktsyntax ist gleichbedeutend mit
Code:
id anObject = [object accessorMessage]; // Getter
[object setAccessorMessage:anObject]; // Setter

Was Du versuchst ist also eine Methode zu incrementieren. Das kann nicht gehen.

MacApple
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Hi Amin!

Habe mir mal dein Tutorial "Absolute Beginner" angesehen und bin das mal durchgegangen. Habe früher mal Java programmiert und bin mit dem Tutorial sehr gut zurecht gekommen.
Eine Frage habe ich allerdings: Ich wollte ein ähnliches Programm schreiben, was eine Tabelle als Grundlage hat und die erste Reihe der Tabelle soll eine laufende Nummer sein. Ich habe bereits ein TableView mit 11 Reihen und diese Reihen jeweils per ArrayController mit dem "Model" verbunden. Allerdings steh ich da gerade auf dem Schlauch.
Ich habe in meiner Controller Klasse ein neues IBOutlet erstellt und dieses mit dem ArrayController verbunden.
Ich dachte, ich könnte dann sowas wie
Code:
[arrayController.arrangedObjects.nummer++];
machen, geht aber nicht...
Ich nehme an, dass du mit Reihen die Spalten meinst?!

Nein, die arrangedObjects sind ja ein Array. Ein Array hat aber kein Attribut nummer. Mutmaßlich meinst du:
Code:
for( id item in arrayController.arrangedObjects ) {
   item.nummer++;
}
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Das geht nicht, weil Objective-C kein Java ist.;)

Die Syntax von Objective-C ist
Code:
[object message];
In Objective-C 2.0 gibt es neu die Punktsyntax für den "Aufruf" von Accessoren.
Code:
id anObject = object.accessorMessage; // Getter
object.setAccessorMessage = anObject; // Setter
Diese Punktsyntax ist gleichbedeutend mit
Code:
id anObject = [object accessorMessage]; // Getter
[object setAccessorMessage:anObject]; // Setter

Was Du versuchst ist also eine Methode zu incrementieren. Das kann nicht gehen.

MacApple
Unprobiert, aber muss gehen:
entity.attribute++ muss eigentlich gehen, weil es entity.attribute += 1 entspricht, was entity.attribute = entity.attribute + 1 entspricht, was offensichtlich geht. Ich kann es jetzt aber gerade nicht nachprüfen (Tiger).

Er hat einen anderen Fehler.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Unprobiert, aber muss gehen:
entity.attribute++ muss eigentlich gehen, weil es entity.attribute += 1 entspricht, was entity.attribute = entity.attribute + 1 entspricht, was offensichtlich geht. Ich kann es jetzt aber gerade nicht nachprüfen (Tiger).
Jetzt wo Du das sagst, klingt logisch und funktioniert auch (habe es gerade getestet). Das incrementiert sogar Zeiger auf Objekte!o_O

MacApple
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Jetzt wo Du das sagst, klingt logisch und funktioniert auch (habe es gerade getestet). Das incrementiert sogar Zeiger auf Objekte!o_O
So ganz kann Objective-C seine Herkunft nicht verbergen,

Amin Negm-Awad
Präsident, Vizepräsident und Kassenwart des Vereins zur Ächtung der Zeigerarithmetik e. V.
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Danke erstmal für die Antworten. Aber ich weiß immer noch nicht, wo der Fehler liegt ;)
Gibt es denn eigentlich keine Möglichkeit, das bei dem Model direkt einzustellen, dass jeder Neueintrag das Attribut nummer um 1 erhöht?

Und ja, mit Reihen meinte ich Spalten...^^

EDIT:

Wenn ich
Code:
for (id item in arrayController.arrangedObjects){item.nummer++;}
nehme, dann erhalte ich:
Code:
error: request for member 'nummer' in something not a structure or union
das gleiche erhielt ich allerdings vorher, wo ich es auf die andere Weise versucht hatte, auch.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Du musst dem Item eine Klasse geben, die die Accessoren implementiert oder KVC verwenden.
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Du musst dem Item eine Klasse geben, die die Accessoren implementiert oder KVC verwenden.

Da steh ich jetzt schon wieder auf dem Schlauch. :)
Ich hab mir zu KVC mal Beispiele angesehen. Es scheint das zu bewerkstelligen, was ich machen will, nämlich auf einzelne Werte aus dem Model aus dem Quellcode heraus zugreifen und diese verändern, in dem Fall die laufende Nummer um eins erhöhen.
Jedoch kapier ich gerade nicht ganz, wie ich das verwirklichen muss.
Ich wollte mir für den Anfang erstmal den aktuellen Wert der aktiven Zeile rausziehen, mit
Code:
float f = [arrayController.selection valueForKey:nummer];
geht aber wieder nicht
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Da steh ich jetzt schon wieder auf dem Schlauch. :)
Ich hab mir zu KVC mal Beispiele angesehen. Es scheint das zu bewerkstelligen, was ich machen will, nämlich auf einzelne Werte aus dem Model aus dem Quellcode heraus zugreifen und diese verändern, in dem Fall die laufende Nummer um eins erhöhen.
Jedoch kapier ich gerade nicht ganz, wie ich das verwirklichen muss.
Ich wollte mir für den Anfang erstmal den aktuellen Wert der aktiven Zeile rausziehen, mit
Code:
float f = [arrayController.selection valueForKey:nummer];
geht aber wieder nicht
Scherzkeks. Der Witz bei KVC ist ja, dass der Name der Eigenschaft als String angegeben wird:
Code:
float f = [arrayController.selection valueForKey:@"nummer"];
Die Eigenschaft muss freilich in Core-Data modelliert (vorhanden) sein.
 

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Danke! Das hat mich schonmal ein großes Stück weitergebracht. Sorry, wenn ich hier zum "Scherkeks" werde, aber ich befasse mich erst seit kurzem mit dem Thema und bin anscheinend gerade leicht überfordert o_O
Ich bekomme jetzt allerdings die Meldung
Code:
error: incompatible types in assignment"
was ich nicht ganz verstehe, da die Eigenschaft "nummer" im Core Data Model als Float vorhanden ist.