Objective-C++ NSString in C-String umwandeln

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Objective-C++ NSString in C-String umwandeln

    Hallo liebe Community!

    Ich habe ein Problem, und zwar wollte ich mal gucken, wie weit man Obj-C und C++ mixen kann und hab direkt ein kleines Beispiel gebastelt, welches ein Passwort überprüfen soll.
    Als erstes wird der Text im Passwort-Feld als NSString ausgelesen, dann per cStringUsingEncoding: in einen C-String umgewandelt und dann an die Methode der C++-Klasse übergeben, die überprüft, ob das Passwort richtig ist. Nur leider kommt beim Überprüfen in der C++Klasse immer false heraus :(

    Hier mal ein paar Code Auszüge:

    // CViewController.h

    Quellcode

    1. #import <Cocoa/Cocoa.h>
    2. #import "CClass.h"
    3. @interface CViewController : NSObject {
    4. IBOutlet NSTextField *passwordField;
    5. IBOutlet NSTextField *label;
    6. CClass* myCClass;
    7. }
    8. - (IBAction)pushCheck:(NSButton *)sender;
    9. @end
    Alles anzeigen



    // CViewController.mm

    Quellcode

    1. #import "CViewController.h"
    2. #import "CClass.h"
    3. @implementation CViewController
    4. #pragma mark -
    5. #pragma mark init/dealloc
    6. - (id) init {
    7. self = [super init];
    8. if (self != nil) {
    9. myCClass = new CClass;
    10. }
    11. return self;
    12. }
    13. - (void) dealloc {
    14. delete myCClass;
    15. [super dealloc];
    16. }
    17. #pragma mark -
    18. #pragma mark IBActions
    19. - (IBAction)pushCheck:(NSButton *)sender {
    20. if(myCClass->checkPassword([[label stringValue] cStringUsingEncoding: NSUTF8StringEncoding])) {
    21. [label setStringValue:@"Richtig!"];
    22. /*
    23. passwordField.enabled = NO; // Wie funktioniert das in Cocoa?
    24. */
    25. } else
    26. [label setStringValue:@"Falsches Passwort!"];
    27. }
    28. @end
    Alles anzeigen



    // CClass.h

    C-Quellcode

    1. #ifndef _CClass_H_
    2. #define _CClass_H_
    3. #include <cstring>
    4. using namespace std;
    5. class CClass {
    6. public:
    7. CClass();
    8. ~CClass();
    9. bool checkPassword(const char* password);
    10. };
    11. #endif
    Alles anzeigen




    // CClass.cpp

    C-Quellcode

    1. #include <iostream>
    2. #include <cstring>
    3. #include "CClass.h"
    4. using namespace std;
    5. CClass::CClass() {
    6. // init
    7. };
    8. CClass::~CClass() {
    9. // dealloc
    10. };
    11. bool CClass::checkPassword(const char* password) {
    12. if(strcmp("sehr sicher", password) == 0)
    13. return true;
    14. else
    15. return false;
    16. };
    Alles anzeigen



    Weiß jemand was ich falsch mache?
    Ich habe die Vermutung, dass das Encoding was ich angegeben habe falsch ist.
    Im Anhang ist auch nochmal das komplette Projekt.


    Danke schonmal im Vorraus für jegliche Hilfe!! :)

    PS: Hoffe ich habs ins Richtige Forum gepackt, war mir nicht ganz sicher :s
  • Ich nöl auch gerne noch weiter rum: Klassennamen gross und mit "C" Präfix, das ist auch so eine Microsoft Unart, die diesen Ungarn nie verstanden haben :P
    undCamelToe() macht man vielleicht bei Java :P Gut, dass Python das inzwischen auch ächtet, ich finde es unleserlich und furchtbar.
    Der Stil der Standardbibliothek und auch Boost geben einem ja schon ganz gute Hinweise - warum sollte man es bei seinem eigenen Code ganz anders machen?
    C++
  • zerm schrieb:

    Nebenbemerkung: In C++ gibt es std::string und einen == operator für Stringvergleich.
    Du mixt Obj-C++ mit C++ mit C :P

    Das kam, weil ich nur wusste, wie man einen NSString in einen C-String umwandelt, deswegen hab ich dann auch die Standard C-Funktionen zum Vergleichen von Strings benutzt ;)
    Habs aber dann direkt geändert, als gritsch mir gezeigt hat, wie man einen NSString auch als std::string umwandeln kann ;)

    Und wegen den Klassennamen:
    Ich finds so einfacher zu merken: Klassennamen groß und Variablen, Methoden, Funktionen etc. klein :)


    LG ThePat