我有一个现有的模型类,我想用 Parse 来管理它,最好将它的父类(super class)从 NSObject 更改为 PFObject。但这是一个真实世界的模型类,在设计时没有考虑 Parse,因此它提出了许多挑战。
挑战是:
这些事情中的每一件事似乎都需要特殊处理才能在 Parse 中正确处理,Parse 的文档对这些问题进行了简要说明。
举个例子,我的课是这样的:
// I’d like to change this to be a PFUser subclass.
class User : NSObject { /* an ordinary user object */ }
// And this to be a PFObject subclass
class Tango : NSObject {
var user:User // Presumably, a Parse "ointer" to a PFUser
var opponentarticipant
var info:NSString?
var watchers:NSArray // an array of Participants
var duration:NSTimeInterval? // (notice this is an optional value type, in accessible from Objc)
// various methods
}
// a custom class which contains a User
class Participant : NSObject
{
var status:String
var user:User // a Pointer to a PFUser?
// etc..
}
所以我在这里有几个关键问题:
Pointer
到 User
PFUser
的子类?Optional
等 swift-only 类型有任何规定?或者这是另一种情况,其中有一个扩展点来提供与 Parse 可以处理的数据类型的相互转换?Tango
的所有这些明显的困难,我是否更明智地实现一种将实例转换为/从普通旧 plist 类型(字典、数组、字符串、数字)转换的方法,并拥有PFObject 处理那些?我对最大查询灵 active 或最大性能不感兴趣。我对可以可靠工作的最快的东西感兴趣,并且需要对现有代码进行最少的重写,这取决于现有的类层次结构。我知道 User/Tango
关系可以描述为多对多,这就是 PFRelation
的用途,但我觉得它需要专业重新设计以使用它。
换句话说,我真的希望我可以避免用一个新的类层次结构替换我的整个模型层,该类层次结构设计为非规范化的表,以满足 Parse 的乐趣。我有适用于当前结构的现有代码,我正在尝试在不破坏任何内容的情况下适应 Parse。
那么这些关键问题是否适合为 Parse 改进这个类?处理它们的正确方法是什么?
您绝对应该查看子类化指南。一些对您的用例特别重要的注意事项:
User : PFUser
),那么您只需要注册该子类。所有的构造方法都返回 instancetype
所以你可以在 User 上调用它们,你会得到一个实际的 User 。同样,对 Parse 用户类的任何查询都将返回反序列化为您的类型的结果。PFObject
,则还必须实现 +parseClassName
。这会将您的类映射到您希望在数据浏览器中看到的名称。此名称必须在所有语言中保持一致,以确保您使用的是相同的数据。PFObject
子类库被编写为仅实现 @dynamic
属性。如果您 @static
它或定义方法,则 PFObject 将不理会它。如果您有一个同名的 ivar,则该属性不会保存到 Parse,但我们将创建一个访问器/突变器对,该对尊重我们在合并时采用的 PFObject
的内部锁服务器数据或准备保存操作。PFObject
可以处理任何 JSON 可序列化原语的属性、指向其他 PFObject
子类型的指针、其数组/字典以及 PFRelation
指针。我还没有玩过 Swift,所以我不知道它会如何与可选属性交互;我假设它们是隐藏的 NSNumber,PFObject
处理 NSNumber 以及原语(自动装箱/拆箱)。
//注意:+initialize 是 Objective-C 唯一的非多态函数;每节课
//必须直接实现。
+(无效)初始化{
[自注册子类];
}
关于ios - 如何将 Parse 的 PFObject 改造为现有的、复杂的、聚合模型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26857427/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |