Problem bei Methoden

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

  • Problem bei Methoden

    Hey Leute,

    habe im Laufe eines Projektes mit Obj-C/Cocoa angefangen, bin daher noch nicht wirklich fit drinne.

    Zu meinem Problem. Ich will ein Label setzen welches mir das aktuelle Datum zeigt. ggfs soll dieses Datum aus dem Cache geladen werden -> Daher Übergabe eines NSDate Objektes.
    Jedoch funktioniert dies nur wenn die Methode wie im Quellcode keinen Übergabewert hat

    Quellcode

    1. [self setTimeStamp:[NSDate date]];
    2. //....
    3. -(void)setTimeStamp:(NSDate *)now{
    4. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    5. [formatter setDateFormat: @"dd-MM-yyyy HH:mm:ss"];
    6. NSString *stringFromDate = [formatter stringFromDate:now];
    7. [timeStamp setText:stringFromDate];
    8. }
    9. //== So gehts nicht
    10. -(void)setTimeStamp{
    11. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    12. [formatter setDateFormat: @"dd-MM-yyyy HH:mm:ss"];
    13. NSString *stringFromDate = [formatter stringFromDate:[NSDate date];
    14. [timeStamp setText:stringFromDate];
    15. }//== so gehts
    Alles anzeigen

    Kann mir jemand sagen worans liegt? Benutze tue ich die aktuelle Version von xcode unter mac

    lG
    Hat-schii
  • Ich würde mal Vermuten, dass deine Klasse ein Property mit dem Namen timeStamp besitzt welchen ganz sicher nicht vom Typ NSDate ist. Dann gibt es bereist eine Method setTimeStamp: mit anderem Typ. Nenn deine Methode einfach -setTimeStampWithDate: (NSDate*)date o.Ä.
  • Ja leider wird seit der neusten Xcode Version automatisch Setter und Getter angelegt auch ohne @synthesize. Ich finde das sehr störend nur um eine Zeile Code zu sparen. Solche "Hidden Features" machen mehr Ärger als das sie helfen finde ich.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Das auto @synthesize ist hier wohl nicht das Problem, da Du ja kein @property hast wird da nämlich auch nichts synthetisiert. Aber KVC sucht nach einem @selector(setTimeStamp: ) und da ist es vollkommen egal ob deine Variante der Methode ein (NSDate*) erwartet. Für KVC ist deine Methode der Setter von timeStamp und daher nimmt die Runtime beim Laden des NIB Files an, dass es das UILabel im NIB file via -setTimeStamp: setzten muss. Im Ergebnis wird das IBOutlet timeStamp in deiner Klasse dann niemals mit dem UILabel des NIBs verbunden. Wenn Du jetzt versuchst das Label mit einem Datum zu füllen, dann geht das schief, da timeStamp nil ist.
  • Es empfiehlt sich auch sich gleich anzugewöhnen die Dinge richtig zu benennen:

    Ein Label kann kein timeStamp sein, ergo nennt man es auch nicht so sondern wenn schon dann timeStampLabel. Wobei ich auch das nur suboptimal finde da man immer noch nicht weiß was das Label eigentlich anzeigen soll. Also noch besser wäre dateLabel denn du zeigst ja ein Datum an und keinen TimeStamp.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)