解析具有两个子类的抽象PFObject

时间:2015-05-16 05:17:14

标签: ios objective-c inheritance parse-platform

我正在使用Parse作为我的后端,我正在尝试将两个子类映射到同一个表。

在我的模型中,我有一个抽象的Post类,它符合PFSubclassing协议并包含几个属性和方法。在我的Parse数据库中,我想要一个Post表。

Here is some of my Post.h file, to give an idea:

@interface ParsePost : PFObject<PFSubclassing>

@property (strong, nonatomic) PFUser *postedBy;

@property (strong, nonatomic) NSString *text;

@property (strong, nonatomic) PFGeoPoint *location;

@property (strong, nonatomic) PFFile *image;
@property (strong, nonatomic) PFFile *thumbnail;

@property (strong, nonatomic) NSNumber *commentCount;

现在,在我的源代码中,我想要一个MessageComment类,代表可以制作的两种类型的帖子。消息和注释共享许多属性和方法,但也有一些差异。我本来希望我可以在没有Parse甚至知道的情况下继承Post,并且只需在我的源代码中使用不同的具体子类来简化开发和应用程序逻辑......但是Parse给了我一些错误。

这是Message.h(空)

@interface Message : ParsePost


@end

和Comment.h

@interface Comment : ParsePost

@property (strong, nonatomic) ParsePost *parentPost;

@end

实现文件包含更多差异,但这对问题不重要(我不认为)。不能覆盖Post的{​​{1}}方法,这似乎是PFSubclassing中最重要的部分。

事情对我来说就像我希望的那样,但后来我更新了我的Parse框架并切换到CocoaPods而不是手动添加框架,现在我收到了一些错误......

我得到的第一件事,当我尝试构建我的程序时出现错误+ (NSString *)parseClassName现在,由于Message继承自'The class Message must be registered with registerSubclass before using Parse.'Post寄存器作为子类,我不会'我已经预料到了这一点......但我仍然遇到了这个问题。

如此盲目,不是真正了解并希望事情能够成功,我向Post+ (void)load { [self registerSubclass]; }添加了Message.m。然而,现在,我收到一条错误说Comment.m这条消息对我来说也没有意义......

如果我只注册'Tried to register both Comment and Message as the native PFObject subclass of Post. Cannot determine the right class to use because neither inherits from the other.',那么该应用程序可以正常运行...但我担心这会导致路上出现问题。

请有人向我解释这里发生了什么?为什么以前这个工作突然间让我误入歧途?我不希望Parse甚至担心我子类Message的事实......它应该只是担心我从服务器检索并发送到服务器的Post对象,无论名称和我给客户端的本地对象的方法....对吧?

1 个答案:

答案 0 :(得分:1)

问题在于解析SDK提供了在您要求它下载内容时创建子类的实例,因此它需要知道与云数据库中的类关联的唯一类类型。如果你试图注册多个课程,那就会让你感到困惑,因为你要求意外的事情。

更好的选择是仅维护具有所有必需属性的单个Post类,然后添加公开特定子类/类型的特殊属性的类别以及相关方法以便于创建。

这实际上只允许您使用注释和消息术语,同时允许解析以Post s的形式工作。