Ermittelt den richtigen Typ beim Unterklassen-PFUser

7

Ich versuche, PFUser in Parse auf iOS zu untergliedern. Ich kann eine Unterklasse mit dem folgenden Code erstellen:

%Vor%

Wenn ich [MyUser currentUser] aufruft, ist das Objekt, das ich zurückbekomme, vom Typ PFUser , aber nicht vom Typ MyUser . Casting es zu MyUser* hilft nicht, es wirft nur den Fehler "nicht erkannte Selektor an Instanz 0xce9c0c0 gesendet", wenn ich versuche, eine der benutzerdefinierten Eigenschaften, z. user.avatar , das in MyUser definiert ist.

Wie kann ich das zwischengespeicherte Objekt currentUser meines benutzerdefinierten Typs abrufen?

    
tghw 05.03.2014, 16:37
quelle

3 Antworten

20

Der Schlüssel stellte sich als die Reihenfolge der Registrierung von Unterklassen und der Anwendungs-ID heraus.

%Vor%

Bewirkt, dass das Problem auftritt. Wenn Sie jedoch die Anwendungs-ID nach dem Registrieren von Unterklassen festlegen, funktioniert es wie erwartet.

%Vor%     
tghw 07.03.2014, 17:25
quelle
1

Wenn Sie eine neue Klasse in Parse erstellen, steuern Sie den Namen dieser Klasse. Angenommen, Sie erstellen eine neue Klasse namens "Armor".

Wenn Sie eine Unterklasse in Objective-C erstellen, ordnen Sie die erstellte Objective-C-Klasse der Parse-Klasse zu. Der folgende Code ist die Implementierungsdatei für diese Armor-Unterklasse. Wie Sie sehen können, ist der Objective-C-Klassenname "Armor" und der Parse-Klassenname ist auch "Armor".

%Vor%

In diesem Fall sind der Objective-C-Klassenname und der Parse-Klassenname identisch. Dies muss jedoch nicht der Fall sein. Wenn ich den Namen meiner Objective-C-Klasse in "BrandonsAwesomeClass" ändern würde, könnte dies immer noch der Parse "Armor" -Klasse zugeordnet werden. Wenn ich eine neue Instanz von BrandonsAwesomeClass erstellen würde, würde immer noch der Parse-Klassentyp von "Armor" zurückgegeben werden.

%Vor%

In Ihrem Fall wird die Parse-Benutzerklasse immer "_User" genannt. Sie können diesen Namen nicht ändern und es spielt keine Rolle, wie der Name Ihrer Objective-C-Unterklasse lautet, er wird immer PFUser als Klasse zurückgeben.

Dies wird sich nicht wirklich auf Ihren Code oder Ihr Projekt auswirken, da Sie der Parse "_User" -Klasse über die Website weiterhin benutzerdefinierte Eigenschaften hinzufügen und der Objective-C-Unterklasse die @dynamic-Eigenschaften hinzufügen können.

Solange Sie Ihre Unterklasse korrekt eingerichtet haben, [MyUser currentUser] .avatar ist dasselbe wie beim Zugriff auf [[PFUser currentUser] objectForKey: @ "avatar"]

Ich habe eine Verknüpfung mit dem Parse-Blogpost erstellt, der Unterklassen als Referenz erklärt.

Ссылка

    
Brandon Schlenker 05.03.2014 18:56
quelle
0

Versuchen Sie [PFUser object] .

[PFUser currentUser] gibt PFUser zurück, aber [PFUser object] sollte Ihre Unterklasse zurückgeben, wenn sie korrekt registriert wurde.

    
Moonwalkr 06.03.2014 14:32
quelle