/ / Semantisches Problem mit nicht verwandtem Objekt in Objective-C - objective-c, ios, uiviewcontroller

Semantisches Problem mit nicht verwandtem Objekt in Objective-C - objective-c, ios, uiviewcontroller

Ich habe ein UIViewController Unterklasse, die eine Nachricht zum Initialisieren des Controllers mit einem benutzerdefinierten Modell implementiert:

- (id)initWithUser:(FacebookFriend *)user;

Wenn ich dies benutze, um meinen Controller zu initialisieren:

ProfileViewController *profileViewController = [[ProfileViewController alloc] initWithUser:friend];

Der Compiler beschwert sich über das Senden einer Nachricht an NSUserDefaults"gleichnamige Nachricht:

- (id)initWithUser:(NSString *)username;

warning: incompatible Objective-C types "struct FacebookFriend *", expected "struct NSString *" when passing argument 1 of "initWithUser:" from distinct Objective-C type

Ich verstehe nicht ganz, warum es mich darüber benachrichtigt, wenn ich nicht denke UIViewController erbt von NSUserDefaults irgendwo. Gibt es eine Möglichkeit, diesen Fehler zu deaktivieren? Könnte dies ein Problem verursachen? Sollte ich meinen Klasseninitialisierer einfach umbenennen, um Verwirrung zu vermeiden?

Antworten:

2 für die Antwort № 1

Das Problem ist, dass Sie einen mehrdeutigen Selektor haben. weil alloc Gibt den generischen Typ (für Objective C) zurück id, der Anruf an initWithUser: ist mehrdeutig geworden, und so wird es mit dem verwirrt NSUserDefaults Methode initWithUser:. Der Compiler denkt, dass Sie versuchen, dieses zu verwenden.

Sie können die Mehrdeutigkeit beseitigen, indem Sie Folgendes ausführen:

ProfileViewController *profileViewController = [(ProfileViewController*)[ProfileViewController alloc] initWithUser:friend];

1 für die Antwort № 2

Haben Sie versucht, das Ergebnis von direkt zu gießen? -alloc? Etwas wie das:

ProfileViewController *profileViewController = [(ProfileViewController *)[ProfileViewController alloc] initWithUser:friend];