Methode erstellen die einen Objekt zurück gibt Error(Expected a Type

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

  • Methode erstellen die einen Objekt zurück gibt Error(Expected a Type

    Hallo,

    ich Rätzel schon eine weile, wieso ich folgende Methode nicht definieren kann:

    UserDB.h
    habe die Klasse mit "#import "User.h";" importiert

    Quellcode

    1. -(User *)getUser:(NSString *)userName;


    UserDB.m

    Quellcode

    1. -(User *)getUser:(NSString *)userName{
    2. User *user = [[User alloc] init];
    3. return user;
    4. }


    Was mache ich da Falsch? Wieso sagt er mir immer, das ein Typ erwartet wird? Liegt es daran, das ich mit Source-Controll arbeite? habe aber alle files Commitet.... geht dennoch nicht
    :(
  • Ja alles drin

    Quellcode

    1. #import <Foundation/Foundation.h>
    2. #import "Connection.h"
    3. #import "User.h"
    4. @interface UserDB : NSObject <NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSessionDelegate, NSURLSessionDownloadDelegate>{
    5. }
    6. @property (nonatomic, strong) NSURL *url;
    7. @property (nonatomic, strong) NSURLSessionConfiguration *defaultConfig;
    8. @property (nonatomic, strong) NSURLSessionConfiguration *customConfig;
    9. @property (nonatomic, strong) NSURLSessionConfiguration *ephemeralConfig;
    10. @property (nonatomic, strong) NSURLSessionConfiguration *backgroundConfig;
    11. @property (nonatomic, strong) NSURLSession *defaultSession;
    12. @property (nonatomic, strong) NSURLSession *customSession;
    13. @property (nonatomic, strong) NSURLSession *ephemeralSession;
    14. @property (nonatomic, strong) NSURLSession *backgroundSession;
    15. @property (nonatomic, strong) NSOperationQueue *delegateQueue;
    16. @property(readonly, retain) id< NSURLSessionDelegate > delegate;
    17. -(id)init;
    18. -(NSURLSessionConfiguration *) defaultSessionConfiguration; //nutzt globalen canche, cookie credential storage objects
    19. -(NSURLSessionConfiguration *) ephemeralSessionConfiguration; // private sessions ohne persistent storage
    20. -(NSURLSessionConfiguration *) backgroundSessionConfiguration:(NSString *)identifier; // für sessions im hintergrund wenn die app nicht aktiv ist
    21. -(NSURLSession *) defaultSession;
    22. -(NSURLSession *) customSession;
    23. -(NSURLSession *) ephemeralSession;
    24. -(NSURLSession *) backgroundSession;
    25. -(User *)getUser:(NSString *)userName;
    26. -(NSURLSessionDataTask *)newDataTask;
    27. -(void)newDefaultSession;
    28. //-(void)newSession:(NSURL *)aURL;
    29. @end
    Alles anzeigen
  • Der Bezeichner getUser ist für eine conveniance allocator Methode auch gänzlich ungeschickt. Funktionen oder Methoden die mit get anfangen sind in der Regel getter und erzeugen keine Objecte. Du solltest Deine Methode unbedingt umbenennen in

    -(User*)userByName:(NSString*)userName;

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • User.h

    Quellcode

    1. #import <Foundation/Foundation.h>
    2. #import "UserDB.h"
    3. #import "Connection.h"
    4. enum positions { Employee, Manager};
    5. @interface User : NSObject
    6. {
    7. @private
    8. NSString *firstName;
    9. NSString *lastName;
    10. NSString *userName;
    11. NSString *password;
    12. enum positions position;
    13. UserDB *userDB;
    14. }
    15. @property (nonatomic, getter = isEnabled) BOOL *loggedIn;
    16. -(id)init;
    17. -(void)setUserName:(NSString *)aUserName;
    18. -(void)setLastName:(NSString *)aLastName;
    19. -(void)setPassword:(NSString *)aPassword;
    20. -(void)login;
    21. @end
    Alles anzeigen


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Rocks360 ()

  • Dieser Code ist relativ sinnlos, wenn auch nicht das Problem deines Fehlers. Aber wenn in deinem Code noch mehr so grundlegende Verständnisfehler drin sind, dann läßt das vermuten das noch mehr Fehler auftreten werden.

    Du solltest Dir noch einmal ein Grundlagenbuch zur Hand nehmen und nachlesen wie man Klassen instanziert, was Setter und Getter sind und was Attribute bzw, Properies und wie man sie benutzt.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Rocks360 schrieb:


    User.h

    Quellcode

    1. [...]
    2. @interface User : NSObject
    3. {
    4. @private
    5. NSString *firstName;
    6. NSString *lastName;
    7. NSString *userName;
    8. NSString *password;
    9. enum positions position;
    10. User *userDB;
    11. }
    12. [...]
    Alles anzeigen

    Vielleicht lerne ich jetzt ja wieder etwas, aber inwiefern kann eine Interface-Datei rekursiv sein? Soll heissen, wie kann "User.h" in der Klassendefinition eine Instanz-Variable vom Typ "User" haben ... Das Thema Namensgebung von Methoden und Klassen jetzt einmal vollkommen außenvorgelassen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • #import <Foundation/Foundation.h>

    @class MyClass; läuft es :)

    Danke euch allen ....jetzt muss ich aber dennoch mal ins Busch schauen damit ich auch weiß warum ;)

    Quellcode

    1. @class User;
    2. @interface UserDB : NSObject
    3. -(User *)userByName:(NSString *)userName;
    4. @end

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Rocks360 ()

  • Sorry aber das ist jetzt voll lustig. Du machst den Fehler die Klasse User in sich selber zu deklarieren, was total sinnfrei ist und behebst es dadurch dass du dem Compiler vorher sagst das es eine Klasse User gibt.

    Bitte lass es nicht so auch wenn es geht. Es macht wirklich überhaupt keinen Sinn und spätestens wenn du dann versuchst mit Derm User im User zu arbeiten wird es richtig konfus und du wirst dir gnadenlos die Karten legen.

    lösche den Eintrag

    User dbUser;

    im .h File und schaffe es dann diecsoftware m laufen zu bringen . Dann ist das in ordnung.

    gruss

    claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • JA das ist sehr einfrei, deshalb habe ich es ja auch weg gemacht xCode hat leider so eine Autokorrektur, und will UserDB ständig durch User ersetzen...ich bin da lediglich drauf gekommen bevor ich es kopier habe .... ist ja auch egal... Die Klasse User soll die Klasse UserDB enthalten, da über die letztere die Datenbankanbindung für den User erfolgen soll. Deshalb muss die natürlich in der User Klasse drin stehen. Oder sollte ich das irgw. anders machen? Das @class sagt also dem Compiler das es diese klasse gibt in der .h file? und im der .m file mache ich dann einen #import "Klasse.h" ...?
  • Thallius schrieb:

    Der Bezeichner getUser ist für eine conveniance allocator Methode auch gänzlich ungeschickt. Funktionen oder Methoden die mit get anfangen sind in der Regel getter und erzeugen keine Objecte. Du solltest Deine Methode unbedingt umbenennen in

    -(User*)userByName:(NSString*)userName;

    Gruß

    Claus
    Nö, Methoden, die ein get im Parameternamen haben sind keine Getter, sondern Methoden, die ein Out-Parameter liefern. Das get bezieht sich dementsprechend auf den Parameter, nicht auf den Returnwert. So etwas wie er gemacht hat, sollte es also nie geben, auch nicht als Getter.

    Es gab früher so etwas mal irgendwo in Untiefen von Objective-C-Neulingen bei Apple, die ihren C++-Code wrappen mussten. Meines Wissens ist das mittlerweile sämtlich bereinigt.
    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"?