PFObject 子类获取器和设置器?
Posted
技术标签:
【中文标题】PFObject 子类获取器和设置器?【英文标题】:PFObject Subclass Getters and Setters? 【发布时间】:2015-07-19 17:35:23 【问题描述】:我有一个简单的PFObject
子类设置。 MyPFSubclass
。它看起来像这样:
@interface MyPFSubclass: PFObject <PFSubclassing>
+ (NSString *)parseClassName;
@property (retain) NSString *myString;
@end
#import <Parse/PFObject+Subclass.h>
@implementation MyPFSubclass
@dynamic myString;
+ (NSString *)parseClassName
return @”MyPFSubclass”;
@end
正如预期的那样,这很好用,直到我今天发现。
我可以设置myString
值并按预期读写,NSLog
显示数据是我设置的。
MyPFSubclass *obj = [MyPFSubclass new];
obj.myString = "@hello";
//prints expected value as set above
NSLog(@"%@", obj.myString);
obj[@"myString"] = "@hello";
//prints expected value as set above, again
NSLog(@"%@", obj[@"myString"]);
但是,如果我执行以下操作,我不会得到更改后的结果。
obj[@"myString"] = @"Hello";
//prints original value, not as set above
NSLog(@"%@", obj.myString);
似乎键名 setter 和 getter 独立于子类 setter 和 getter。我不要这个!
例如,我有一个子类视图,它采用通用 PFObject
和可以从中获取和设置值的键名。
我该如何解决这个问题?为什么我不能混合使用子类和键名 getter 和 setter?
【问题讨论】:
“键名设置器和获取器”是指键控下标? 看我的回答。不确定它是一个完美的解决方案,但肯定不是一个糟糕的解决方案。 KVC (-valueForKey:
et al.) 是一种与键控下标相似但不同的技术。但是,在许多情况下,您可以将一个替换为另一个。
啊,这可能是我感到困惑的地方。感谢您指出不同之处。
【参考方案1】:
不是一个确切的答案,但它是一个解决方案。
我发现在使用PFObject
子类的场景下,使用setValue:forKeyPath
比使用Parse自带的括号语法更可靠。即myObject[@"myAttribute"]
。
如果后者似乎与子类属性不可互换,我发现用 setValue:forKeyPath
替换它是可行的。
【讨论】:
以上是关于PFObject 子类获取器和设置器?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:对象设置器和获取器在克隆/复制/扩展后丢失