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?
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%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.
Tags und Links objective-c ios parse.com subclass