Probleme mit [NSTextField intValue]

  • Probleme mit [NSTextField intValue]

    Hi,
    ich versuche gerade irgendwie einen Einstieg in Objective-C und Cocoa zu bekommen und habe dafür schon einige Tutorials und Foren gewälzt. Bisher funktionierte meine Simulation, die ich gerade schreiben will (zu Testzwecken) für den Anfang ganz gut. Um aber besser weiter zurechnen, habe ich eine Kleinigkeit geändert und wollte eine Variable auf int statt NSString ändern. Soweit so gut.
    Doch seitdem ich das geändert habe, stürzt mein Programm ständig ab und ich lande im Debug-Fenster mit der Assemblerausgabe, mit der ich nicht so viel anfangen kann im Moment. ;)

    Quellcode

    1. - (IBAction)addItem:(id)sender
    2. {
    3. ItemPrice *price = [[ItemPrice alloc] init];
    4. int priceVal = [textFieldItem intValue];
    5. [price setPrice:priceVal];
    6. [[dataSourceItems data] addObject:price];
    7. [listItems reloadData];
    8. [textFieldItem setStringValue:@""];
    9. }


    Das ist die entscheidende Stelle. Dabei ist ItemPrice folgendermaßen definiert:

    Quellcode

    1. @interface ItemPrice : NSObject
    2. {
    3. int _price;
    4. }
    5. - (ItemPrice*)init;
    6. - (int)price;
    7. - (void)setPrice:(int)price;
    8. - (void)dealloc;
    9. @end
    Alles anzeigen


    Und setPrice ist so implementiert:

    Quellcode

    1. - (void)setPrice:(int)price
    2. {
    3. // [price remain];
    4. // [_price release];
    5. _price = price;
    6. }



    Ich kann mir das bisher noch nicht erklären, da auch kein Fehler mit irgendeinem Namen mir genannt wird, so dass ich den Fehler leicht finden könnte (bin da ein wenig verwöhnt von C# und Delphi-Language unter Windows). :(

    Ich hoffe ihr könnt mir da ein wenig unter die Arme greifen.
    Danke,
    Chris
  • Die erste Frage die sich mir stellt:
    Hat es vorher mit dem NSString funktioniert?
    Oder lief dieses Konstrukt noch überhaupt nicht?

    Im letzten Falle würde ich die Outlets deiner NIB überprüfen.

    Wenn es am [NSString intValue] liegen würde, würde dich der Kompiler normalerweise anschreien, dass du eine Typkollision hast.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • ich denke mal dass vorher - (int)price; einen NSString zurückgegeben hat. Da du dieses object in irgend einer datasource hinzufügst ([[dataSourceItems data] addObject:price];) wird wohl irgendwo auf price zugegriffen. Int ist aber kein objekt und somit wird er dir irgendwo abschmieren wo er ein objekt erwartet aber eben der int kommt. dort musst eben wieder nen string draus machen (oder nen entsprechenden getter)
  • int ist ein skalar und kein objekt... verwende mal statt eines einfachen int ein NSNumber... oder schreib deine setter / getter um

    normalweise solltest du allein schon für deinen setter massenweise warnings / fehler bekommen wenn du versuchst einem int einen message zu schicken...
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • Guten Morgen,
    *kopfgegenwand* Okay, war gestern abend schon was spät. Hab natürlich einige Warnungen bekommen, die natürlich geflissentlich ignoriert. :sick:

    Naja, ich schätze mal der Haken ist hier:

    Quellcode

    1. - (id)tableView:(NSTableView*)foldersTableView
    2. objectValueForTableColumn:(NSTableColumn *)foldersTableViewColumn
    3. row:(int)row
    4. {
    5. return [[_data objectAtIndex:row] price];
    6. }


    Mit NSString hat übrigens alles funktioniert. Problem ist nur, dass sich mit Strings nicht sonderlich gut rechnen lässt.

    Wie kann ich denn an der gerade geposteten Stelle aus der Integer-Variable ein Objekt machen, das sich hier zurückgeben lässt?
    Oder alternativ wie man geschickt mit NSNumber umgeht? Sprich im Speziellen: wie bekomme ich den intValue des TextFields in ein NSNumber?

    Chris

    PS: vergesst die letzte Frage -.-
  • Original von chartus
    int ist ein skalar und kein objekt... verwende mal statt eines einfachen int ein NSNumber... oder schreib deine setter / getter um

    normalweise solltest du allein schon für deinen setter massenweise warnings / fehler bekommen wenn du versuchst einem int einen message zu schicken...


    die waren ausgeklammert (hab ich ach erst bein zweiten hingucken gesehen und dann nichts dazu geschrieben)