Von C# nach Obj-C

  • Glaub mir, in 2 Monaten frag eich mich, wo zur Hölle ich Probleme hatte?
    Weil das alles wahrscheinlich eh' Total logisch ist...
    Naja, [] ist für mich ja immernoch eine index-Klammer, deswegen wohl...

    Aber bisweilen lass' mir doch den Spaß, mich wie ein kleines Kind zu Weihnachten zu freuen, wenn der Build ohne fehler durchläuft und ich dann was klicken kann;)

    Ok, ich stehe gerade vor einem Problem...
    Wenn ich in einem Textfield von Anfang an etwas drinstehen haben will, wo mache ich das am besten?
    Interface Builder? Oder gibt es doch sowas wie Prozeduale Arbeitsschritte? Also gleich nach dem Starten den String auf @"Wilkommen\n\nBlablabla" setzen...
    Ok, mehr oder minder gefunden

    //Set your code here to initialize the application...

    Da bin ich wohl richtig
    Aber sobald ich

    Quellcode

    1. [whatever setStringValue:@"Wilkommen\n\nBla Bla Bla"];
    eingebe, sagt er mir, dass whatever undeclared ist, obwohl ich #include "Main Windows.h" geschrieben habe und whatever als

    Quellcode

    1. IBOutlet NSTextField* whatever;
    steht...
    ?(

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Biohazard ()

  • Da kann ich dir gerade nicht helfen... hast du den den Controller im InterFaceBuilder mit dem Label/Textfield verbunden?

    Grundsätzlich empfehle ich diese Podcast in iTunes: "XCode von 0 auf 100"
    Und die Seite: x02100.de/
    Damit lerne ich es auch, die fangen ganz leicht an!
    Durch deine Kenntnisse in c# hast du da bestimmt Vorteile!
    Gruß

    Robin
  • Hallo,

    ich verstehe nicht ganz die Frage, deshalb kann meine Antwort auch nur ein allgemeines Feed Back sein, und ich weiss nicht, ob ich Dir damit helfe....
    Ich selber habe einige Jahre in Java programmiert, zuvor auch schon einiges in C, auch etwas C++.
    Insgesamt ist für mich der Wechsel 'durchwachsen', d.h., es gibt eben Sachen, die meiner Meinung nach in Java besser gelöst sind, aber
    auch ne Reihe von vielen Dingen, die Objective C hervorragend löst, z.B. Grafik-Programmierung. Die Syntax, die ja wohl von Smaltalk
    kommt, ist sicher etwas gewöhnungsbedürftig, auch ich fluche da häufig ... :P
    Dinge, die Java meiner Meinung nach besser kann, ist eben das leidige Problem der Speicherverwaltung, da gibst eben nen richtigen Gabage-Collector,
    der Dir das alles abnimmt.
    Auch kommt es gelegentlich vor, das in Objective C mal ein Programm ohne Fehlermeldung terminiert, und da muss man dann suchen. In Java hast
    Du dann ne korrekte 'Runtime-Fehlermeldung', die Dir sagt, wo die Säge klemmt, als z.B ne 'NullPointerException' oder so!
    Auch echte Compilerfehler, die in Java sinnvoller weise kommen, vermisse ich hier, als .z.B. wenn ich ne Methode habe, die BOOL zurück geben muss,
    und ich eben keinen BOOL-Wert mit return zurückgebe, kommt nur eine Warnung. Mir persönlich wäre da eine echte Fehlermeldung lieber,
    weil sie eben korrekter ist!
    Da brauchst Du meistens nicht mal nen Debugger, weil Du eben ne saubere Fehlermeldung mit Angabe der Zeilennummer in Deinem Code bekommst.
    Das wäre so ein Wunsch von mir an die Entwickler des SDK von Objective C da mal was zu verändern...
    Aber dafür ist die Sprache eben auch prinzipbedingt schneller als Java, und ich möchte eben ne App für das Original entwickeln und nicht
    für ne Kopie, für mich ist eben das iPhone nach wie vor der Maßstab!
    Und Apple hat im Gegensatz zu den Typen aus Redmond schon immer für echte Innovationen gesorgt! ^^
    Die aus Redmond verschlafen ja immer neue Trends um sie dann zu kopieren ..., siehe Bing und solche Teile...
    Und eben auch das von Dir erwähnte C# ist ja sehr an Java angelegt...
  • Byte-Kipper schrieb:


    […]
    Dinge, die Java meiner Meinung nach besser kann, ist eben das leidige Problem der Speicherverwaltung, da gibst eben nen richtigen Gabage-Collector,
    der Dir das alles abnimmt.

    Den gibt es in Objective-C auch, nur nicht auf dem iPhone.

    Byte-Kipper schrieb:

    Auch kommt es gelegentlich vor, das in Objective C mal ein Programm ohne Fehlermeldung terminiert, und da muss man dann suchen. In Java hast
    Du dann ne korrekte 'Runtime-Fehlermeldung', die Dir sagt, wo die Säge klemmt, als z.B ne 'NullPointerException' oder so!

    Kannst du mir das mal zeigen. Ich habe bisher noch kein Programm ohne Fehlermeldung zum Absturz gebracht.

    Byte-Kipper schrieb:

    Auch echte Compilerfehler, die in Java sinnvoller weise kommen, vermisse ich hier, als .z.B. wenn ich ne Methode habe, die BOOL zurück geben muss,
    und ich eben keinen BOOL-Wert mit return zurückgebe, kommt nur eine Warnung. Mir persönlich wäre da eine echte Fehlermeldung lieber,
    weil sie eben korrekter ist! Da brauchst Du meistens nicht mal nen Debugger, weil Du eben ne saubere Fehlermeldung mit Angabe der Zeilennummer in Deinem Code bekommst.
    Das wäre so ein Wunsch von mir an die Entwickler des SDK von Objective C da mal was zu verändern...

    -Wall

    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"?
  • Naja, vorerst bleibe ich mal bei C#, denn 4000 Zeilen code logisch zu übersetzen in eine Sprache, die mir unverständlich ist, das ist mir zu viel arbeit dafür, dass ich nicht mono tippen muss

    Und wenn ich GTK# nehme, dann kann ich im prinzip das selbe mit familiärer Syntax
  • Also noch mal speziell an Amin...

    Zitat Amin
    Kannst du mir das mal zeigen. Ich habe bisher noch kein Programm ohne Fehlermeldung zum Absturz gebracht.
    Da müsste ich Dir ja jetzt den kompletten Code zeigen .:P
    Glaube Dir , dass Du es nicht glaubst, ist aber so. Vielleicht kann man ja aber auch irgendwie so was wie ein Fehler-Level einstellen im Compiler?

    Zitat Amin
    -Wall
    Was bitte meinst Du mit Wall, Wall heisst Wand, aber was meinst Du?

    Also ne echte Compiler-Fehlermeldung ist für mich eine, die nicht zur Laufzeit erfolgt, das wäre ja dann ne Runtime-Exection.
    Es ist eine, die der Compiler so beim übersetzen findet, da kann ich Dir gleich mal das von meiner Abfrage von gestern zeigen.

    Quellcode

    1. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    2. printf("Tastendruck\n");
    3. //return YES;
    4. }


    Wenn ich also so, wie hier zu sehen, das return aus kommentiere, kommt nur die Warnung : warning: control reaches end of non-void function
    Bloss das ist aus meiner Sicht nicht korrekt, die Methode gibt BOOL zurück, da muss auch ein BOOl zurück gegeben werden.
    Ich freue mich sicher nicht über Errors, aber die sind ja schliesslich da, um behoben zu werden... und müssen meiner Meinung nach sein!
  • Byte-Kipper, Amin versucht Dir (mutmaße ich zumindest) mitzuteilen, dass Du die Compiler-Flags -Wall, und viel wichtiger, -Werror verwendest. Kannst Du bei Xcode mehr oder weniger die Häkchen setzen.
    Ich habe mir jetzt inbs. bei Obj-C angewöhnt, -Werror zu verwenden, also alle Warnungen als Fehler zu betrachten. Bei Obj-C kommt halt oft genug nur eine Warning, das Programm startet und crashed dann gleich. Dabei hatte man sich nur vertippt :)
    C++
  • Byte-Kipper schrieb:

    Also noch mal speziell an Amin...

    Zitat Amin
    Kannst du mir das mal zeigen. Ich habe bisher noch kein Programm ohne Fehlermeldung zum Absturz gebracht.
    Da müsste ich Dir ja jetzt den kompletten Code zeigen .:P
    Glaube Dir , dass Du es nicht glaubst, ist aber so. Vielleicht kann man ja aber auch irgendwie so was wie ein Fehler-Level einstellen im Compiler?

    Zitat Amin
    -Wall
    Was bitte meinst Du mit Wall, Wall heisst Wand, aber was meinst Du?

    Also ne echte Compiler-Fehlermeldung ist für mich eine, die nicht zur Laufzeit erfolgt, das wäre ja dann ne Runtime-Exection.
    Es ist eine, die der Compiler so beim übersetzen findet, da kann ich Dir gleich mal das von meiner Abfrage von gestern zeigen.

    Quellcode

    1. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    2. printf("Tastendruck\n");
    3. //return YES;
    4. }


    Wenn ich also so, wie hier zu sehen, das return aus kommentiere, kommt nur die Warnung : warning: control reaches end of non-void function
    Bloss das ist aus meiner Sicht nicht korrekt, die Methode gibt BOOL zurück, da muss auch ein BOOl zurück gegeben werden.
    Ich freue mich sicher nicht über Errors, aber die sind ja schliesslich da, um behoben zu werden... und müssen meiner Meinung nach sein!

    Ich glaube, dass du gehörig Compiler, Warning, Error und Laufzeitsystem durcheinander schmeißt.
    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"?
  • zerm schrieb:

    Amin Negm-Awad schrieb:

    Kannst du mir das mal zeigen. Ich habe bisher noch kein Programm ohne Fehlermeldung zum Absturz gebracht.

    Hihi, Du machst ja nur langweilige Sachen.
    Trotz -Wall keine Fehlermeldung (komisch, eigentlich. Klappt aber auch in Obj-C! Ein Hoch auf __PAGEZERO):

    C-Quellcode

    1. unsigned char *X = NULL;
    2. X[0] = 123;

    Dafür dann schön SIGSEGV :P

    Ich zitiere mal:
    "Auch kommt es gelegentlich vor, das in Objective C mal ein Programm ohne Fehlermeldung terminiert, und da muss man dann suchen. In Java hast
    Du dann ne korrekte 'Runtime-Fehlermeldung', "

    Das oben schmiert definitiv nicht ohne Laufzeitfehler ab. SIGSEGV halte ich definitiv für eine Fehlermeldung.

    +++

    Ich meinte freilich -Werror
    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"?
  • Hm,

    kann sein, dann klärt mich doch bitte mal auf...
    Ich wollte gerade mal dieses Sache mit -Wall einstellen, bin
    ins Menü XCode/Prefereneces gegangen und habe mir dort alle Einstellmöglichkeiten angesehen,
    finde aber nichts wie -Wall oder -WError ???
    Wo kann man das denn setzen!
  • Byte-Kipper schrieb:

    Hm,

    kann sein, dann klärt mich doch bitte mal auf...
    Ich wollte gerade mal dieses Sache mit -Wall einstellen, bin
    ins Menü XCode/Prefereneces gegangen und habe mir dort alle Einstellmöglichkeiten angesehen,
    finde aber nichts wie -Wall oder -WError ???
    Wo kann man das denn setzen!

    Jetzt bringst du Compiler und IDE durcheinander.

    -Wall und -Werror sind Compilerschalter und sollten immer gesetzt sein.

    Negm-Awad, Objective-C und Cocoa, S. 57
    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"?
  • Also soll ich jetzt Dein Buch kaufen? :)
    Glaube nicht dass ich Compiler und IDE verwechsle, auch wenn ich Dir nicht annähernd das Wasser reichen kann.
    Ich vermute mal das es sich um Compileroptionen für ein Commandozeilen-Tool handelt, das im
    Terminal gestartet wird?
    Dagegen habe ich nichts, auch nichts gegen Dein Buch, wenn es gut ist, habe schon mal bei Amazon nachgeschaut...!!! ;)
    Denke mal drüber nach...
    OK, ich will natürlich auch nicht einen Freak widersprechen.
    Trotzdem darf aus meiner Sicht ein echter Error gar nicht durch Optionen 'gemildert' werden!
    Fehler ist Fehler, da wünsche ich mir 'Preussische Korrektheit', auch wenn ich ich jetzt alle
    als Millitaristen bezeichnet! :)
    Bin übrigens kein Preusse...
  • Byte-Kipper schrieb:

    Also soll ich jetzt Dein Buch kaufen? :)

    Ehrlich gesagt, dachte ich, dies sei in jedem Buch erläutert. Produktivsoftware ohne -Wall und -Werror zu compilieren, ist ziemlich dünnes Eis.

    Byte-Kipper schrieb:

    Glaube nicht dass ich Compiler und IDE verwechsle, auch wenn ich Dir nicht annähernd das Wasser reichen kann.

    Wir sprachen von Compilerschaltern, du suchst bei den IDE-Einstelllungen. Das ist definitiv eine Verwechslung zwischen Compiler und IDE.

    Byte-Kipper schrieb:

    Ich vermute mal das es sich um Compileroptionen für ein Commandozeilen-Tool handelt, das im
    Terminal gestartet wird?
    Dagegen habe ich nichts, auch nichts gegen Dein Buch, wenn es gut ist, habe schon mal bei Amazon nachgeschaut...!!! ;)
    Denke mal drüber nach...

    Ich weiß nicht, wie du von Kommandozeilen-Tools zu Amazon kommst.

    Byte-Kipper schrieb:

    OK, ich will natürlich auch nicht einen Freak widersprechen.
    Trotzdem darf aus meiner Sicht ein echter Error gar nicht durch Optionen 'gemildert' werden!
    Fehler ist Fehler, da wünsche ich mir 'Preussische Korrektheit', auch wenn ich ich jetzt alle
    als Millitaristen bezeichnet! :)
    Bin übrigens kein Preusse...

    Hast du mal preußisch korrekt -Wall und -Werror ausprobiert, bevor du hier schreibst?
    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"?
  • Danke euch beiden Zerm und Amin
    erst mal.

    Also ich habe das was mir Zerm gezeigt hat, korrekt preussisch umgesetzt, und die Welt ist
    für mich soweit wieder in Ordnung !!! :)

    Aber Amin, du hast meine Frage nicht wirklich benartwortet,
    WARUM DARF MAN einen echten ERROR durch Optionen 'harmlos' machen???
    Wenn man so im Strassenverkehr das Rechtsfahrgebot umgehen würde, würde blankes Chaos herrschen!!!
    Aber vielleicht sehe ich das ja zu streng...
  • Byte-Kipper schrieb:

    Danke euch beiden Zerm und Amin
    erst mal.

    Also ich habe das was mir Zerm gezeigt hat, korrekt preussisch umgesetzt, und die Welt ist
    für mich soweit wieder in Ordnung !!! :)

    Nichts anderes wollte ich – und mutmaßlich auch zerm – erreichen.

    Byte-Kipper schrieb:

    Aber Amin, du hast meine Frage nicht wirklich benartwortet,
    WARUM DARF MAN einen echten ERROR durch Optionen 'harmlos' machen???
    Wenn man so im Strassenverkehr das Rechtsfahrgebot umgehen würde, würde blankes Chaos herrschen!!!
    Aber vielleicht sehe ich das ja zu streng...

    Weil es Situationen gibt, in denen das praktisch ist. Eigentlich ist man sich wohl für alle Situationen sicher, dass es bessere Lösungen gibt. Aber früher fand man so etwas toll. C ist halt schludrig.

    Aber wie du dem Thread entnehmen kannst, sehe ich es ebenfalls so, dass man alle Warnings beseitigen kann. Deshalb empfehle ich ja -Wall und -Werror. Ich finde es aber auch nicht einen Anlass für eine Diskussion, ob man nun Compileroptionen einbauen oder selbst setzen muss. Dafür ist mir meine Zeit zu schade.
    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"?