Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).

  • Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).

    Hallo,

    ich habe leider kein Obj-C Forum hier gefunden. Naja - bevor ich mit Cocoa anfange muss ich ja erstmal Obj-C lernen - naja dabei haperts. :(

    Hier mal der Code:

    Quellcode

    1. //
    2. // main.m
    3. // hallo
    4. //
    5. // Copyright (c) 2005 __MyCompanyName__. All rights reserved.
    6. //
    7. #import <stdio.h>
    8. #import <objc/Object.h>
    9. @interface testClass: Object
    10. {
    11. int m_a;
    12. int m_b;
    13. }
    14. -(void) printSum;
    15. -(void) setA:(int) n;
    16. -(void) setB:(int) m;
    17. @end
    18. @implementation testClass
    19. -(void) printSum
    20. {
    21. int test = m_a + m_b;
    22. printf(" %i " , test);
    23. }
    24. -(void) setA: (int) n
    25. {
    26. m_a = n;
    27. }
    28. -(void) setB: (int) m
    29. {
    30. m_b = m;
    31. }
    32. @end
    33. int main(int argc, char *argv[])
    34. {
    35. testClass *myTest;
    36. myTest = [testClass alloc];
    37. myTest = [testClass init];
    38. [myTest setA: 9];
    39. [myTest setB: 3];
    40. [myTest printSum];
    41. [myTest free];
    42. return 0;
    43. }
    Alles anzeigen


    Das Programm soll einfach die Summe von 9 und 3 ausgeben.

    Wenn ich das Programm ausführe kommt:


    x has exited due to signal 5 (SIGTRAP).

    Wobei x der Name meines Projektes ist.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • RE: Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).

    Könnte es daran liegen:

    Quellcode

    1. testClass *myTest;
    2. myTest = [testClass alloc];
    3. myTest = [testClass init];


    Man schreibt das normalerweise so:

    Quellcode

    1. myTest = [[testClass alloc] init];


    Das heißt:

    Quellcode

    1. [testClass alloc]

    liefert ein Objekt zurück und diesem sendet man dann die Message "init". Du sendest "init" an die Klasse.

    Andere Schreibweise für den Code oben:

    Quellcode

    1. myTest = [testClass alloc];
    2. myTest = [myTest init];


    Ich würde allerdings sofort mit XCode und Cocoa anfangen, ObjC lernst Du so "nebenbei", das Erlernen des Frameworks (und der Konzepte die dahinter stehen) ist durchaus aufwendiger ...

    klg
  • ubs...

    das ist mir gar nicht aufgefallen:

    Quellcode

    1. testClass *myTest;
    2. myTest = [testClass alloc];
    3. myTest = [testClass init];


    da sind 2 fehler drin. erstens der von klg beschreibene und zweitens schreibt man Klassen-Namen immer mit großem Anfangsbuchstaben - sonst ist wie in deinem fall die fehlersuche viel schwerer. .wenn das groß geschrieben gewesen wäre wäre mir sofort aufgefallen dass du einer Klasse ein init sendest anstatt eienr instanz!

    ;)
  • Original von Objcler
    Danke :) Daran lags.

    Ja hmmm das mit Cocoa scheint wohl zu stimmen. Ich kann ja schon C/C++ - und bis auf dieses kleine Problem klappt ja alles *g

    Buchempfehlungen? :D


    - Cocoa Programming for Mac OS X (von Aaron Hillegass)
    bignerdranch.com/products/

    - Cocoa Programming (von Scott Anguish, Erik M. Buck, Donald A. Yacktman)
    cocoaprogramming.net/

    Das sind die beiden Bücher, die ich habe.

    Ansonsten: Dokumentation von Apple

    klg
  • Original von gritsch
    ubs...

    das ist mir gar nicht aufgefallen:

    Quellcode

    1. testClass *myTest;
    2. myTest = [testClass alloc];
    3. myTest = [testClass init];


    da sind 2 fehler drin. erstens der von klg beschreibene und zweitens schreibt man Klassen-Namen immer mit großem Anfangsbuchstaben - sonst ist wie in deinem fall die fehlersuche viel schwerer. .wenn das groß geschrieben gewesen wäre wäre mir sofort aufgefallen dass du einer Klasse ein init sendest anstatt eienr instanz!

    ;)


    Hmm ja ich weiß... die Geschichte mit den Großbuchstaben mache ich auch immer :) eigentlich *g

    Aber danke euch Allen :D
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • RE: Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).

    Nein, das Erlernen der Konzepte von Objective-C ist durchaus schwieriger. Und man sieht auch allerorten C/C++ - Code mit der Syntax von Objective-C. Das hat einen Grund.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).

    Original von Tom9811
    Nein, das Erlernen der Konzepte von Objective-C ist durchaus schwieriger.


    Hmm, sehe ich eigentlich nicht so ...

    Ich war (von Pascal, C, C++ kommend) eigentlich recht schnell in ObjC "drin", allerdings brauchte ich einige Zeit, bis ich Cocoa richtig verstanden habe bzw. bis ich gelernt hatte, wie man mit Cocoa am schnellsten zum Ziel kommt ...


    Und man sieht auch allerorten C/C++ - Code mit der Syntax von Objective-C. Das hat einen Grund.


    Wie meinst Du das? Meinst Du die Art der Methodenbezeichnungen, z.B.

    Quellcode

    1. myImage.openImageWithPath(path);

    ?

    Wie steht der letzte Satz im Zusammenhang zum ersten? Irgendwie ist meine Leitung heute zu lang ?(

    klg
  • RE: Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).

    Hmm, sehe ich eigentlich nicht so ...

    Ich war (von Pascal, C, C++ kommend) eigentlich recht schnell in ObjC "drin", allerdings brauchte ich einige Zeit, bis ich Cocoa richtig verstanden habe bzw. bis ich gelernt hatte, wie man mit Cocoa am schnellsten zum Ziel kommt ...


    *g* Warten wir es ab ... Die Verwechslung von Klassen- und Instanzobjekt war ja schon ein gutes Beispiel. Schön ist auch immer, dass sich die Leute über

    Quellcode

    1. - (NSString*)string { return _string: }
    2. - (void)setString:(NSString*)string {
    3. if( _string !0 string ) {
    4. [_string release];
    5. _string = [string retain];
    6. }
    7. }
    8. - (void)irjendwu {
    9. NSMutableString myString = [[NSString stringWithFormat:@"dies %d", 5] mutableCopy];
    10. [self setString:myString];
    11. [myString appendString:@und das"];
    12. NSLog( @"%@", [self string];
    13. }
    Alles anzeigen


    aufregen. Geht übrigens auch ganz hervorragend mit Mutable Containern.

    Wie meinst Du das?

    Der Zusammenhang ist, dass viele Leute meinen, weil sie C++ können, sie mit einer Umstellung der Syntax bei Objective-C kanden. Das ist falsch, weil Objective-C anders funktioniert. Nicht nur sie Speicherverwaltung, bei der das am prägnatesten ist. So fällt es etwa C++lern -wie auch mir- schwer, zu verstehen, dass sich Objekte niemals gegenseitig "beinhalten", sondern immer nur referenzieren, siehe obigen Code. Wenn du über das Ergebnis überrascht bist, dann denkst du noch in C++.

    Ein anderes schönes Beispiel ist, dass man sich wehrt -und das gilt ja für jeden am Anfang- so etwas wie

    Quellcode

    1. NSArray anArray = ...:
    2. NSArray* anotherArray = [anArray array byAppendingAnotherArray:[NSArray...]];


    zu machen, weil man meint, das sei langsam -- jedenfalls bei großen Arrays. Nur: In Objective-C beinhaltet niemanden jemand anderen. Es werden keine Objekte kopiert. Es werden Referenzen kopiert. Das ist schnell.
    Das passiert ales sehr schnell, weil man ja mit Objective-C-Syntax so programmieren kann, wie ein C++-Programm aussähe. Dsa meinte ich damit und damit dürfe der Bezug auch klar sein.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).


    Der Zusammenhang ist, dass viele Leute meinen, weil sie C++ können, sie mit einer Umstellung der Syntax bei Objective-C kanden. Das ist falsch, weil Objective-C anders funktioniert.


    Okay, stimmt.

    Nicht nur sie Speicherverwaltung, bei der das am prägnatesten ist. So fällt es etwa C++lern -wie auch mir- schwer, zu verstehen, dass sich Objekte niemals gegenseitig "beinhalten", sondern immer nur referenzieren, siehe obigen Code. Wenn du über das Ergebnis überrascht bist, dann denkst du noch in C++.


    Ja.


    Ein anderes schönes Beispiel ist, dass man sich wehrt -und das gilt ja für jeden am Anfang- so etwas wie

    Quellcode

    1. NSArray anArray = ...:
    2. NSArray* anotherArray = [anArray array byAppendingAnotherArray:[NSArray...]];


    zu machen, weil man meint, das sei langsam -- jedenfalls bei großen Arrays. Nur: In Objective-C beinhaltet niemanden jemand anderen. Es werden keine Objekte kopiert. Es werden Referenzen kopiert. Das ist schnell.


    Richtig. So gesehen gibt es natürlich Unterschiede.
    Nur: IMHO ist es (beispielsweise von C kommend) leichter, ObjC zu lernen als C++, da C++ eine wesentlich größere Erweiterung zu C ist als ObjC.


    Das passiert ales sehr schnell, weil man ja mit Objective-C-Syntax so programmieren kann, wie ein C++-Programm aussähe. Dsa meinte ich damit und damit dürfe der Bezug auch klar sein.


    Ja, ist klar geworden.

    klg
  • RE: Obj-C Frage - Grundlagen - x has exited due to signal 5 (SIGTRAP).

    Nur: IMHO ist es (beispielsweise von C kommend) leichter, ObjC zu lernen als C++, da C++ eine wesentlich größere Erweiterung zu C ist als ObjC.


    Ja, am schwierigsten lernt man eigentlich Objective-C, wenn man von C++ kommt. ;)

    Nein, mir passieren auch immer wieder Dinger, da fasse ich mir selbst an die Stirn. Es wird wohl auch noch eine Weile dauern, bis ich das weg habe.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ich finde Objective-C und Cocoa sollte man zusammen lernen, das macht mehr Spass.

    Und wenn Du professionell anfangen möchtest: Aaron Hillegass kommt nach Deutschland, die Teilnahmegebühr ist aber wahrscheinlich zu hoch für Hobbyisten. Details gibt es bei mir ;)

    Gruss

    Alex
    The only thing that really worried me was the ether.
  • Original von below
    Ich finde Objective-C und Cocoa sollte man zusammen lernen, das macht mehr Spass.


    Auf jeden Fall!


    Und wenn Du professionell anfangen möchtest: Aaron Hillegass kommt nach Deutschland, die Teilnahmegebühr ist aber wahrscheinlich zu hoch für Hobbyisten.


    Ja, leider. Ansonsten würde ich auf jeden Fall hinfahren. Das Buch von Hillegass hat mir sehr geholfen, als ich in Cocoa eingestiegen bin ... war auch mein erstes Cocoa-ObjC-Buch.

    "Cocoa Programming" ist zwar ungleich ausführlicher (obwohl es auch nicht den gesamten Umfang von Cocoa beschreibt), aber der Hillegass ist wesentlich gefälliger zu lesen.

    klg
  • Was mir bei dem Aaron Hillegass Buch nicht gefallen hat ( und was auch bei den Apple Examples bescheiden ist). Du kannst nicht hinten im Buch bei Thema x lesen weil Du dies gerade vom Thema her benötigst. Weil die Themen aufeinander aufsetzen.
    Ich lese mir nicht einfach so mal Themen durch die ich nicht benötige. Warum denn? Weil ich das vielleicht in 6-12 Monaten mal benötigen könnte? Bis dahin weiß ich es eh nicht mehr.
    Hier gefallen mir die Hilfen und Examples von Borland sehr gut (zumindestens die alten ).
    die Borland Pascal 7 und Delphi4 Hilfen waren Musterbeispiele wie Hilfen und Dokus aussehen müssen. Viel und nur auf das Thema bezogener Code.
    Vielleicht viel mir daher am Anfang das verstehen der Apple Dokumentation so extrem schwer.
    Ich wollte sehen was das mach was ich lese und mir nicht theoretisch durchlesen was es machen müsste.

    Naja jeder lernt anders, jeder programmiert anders.
    Das Hillegass Buch ist gut, aber wirklich viel gelesen habe ich darin auch nicht.
    Ist doch auch sehr oberflächlich.

    Sven
    :wq! /dev/null