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 子类获取器和设置器?的主要内容,如果未能解决你的问题,请参考以下文章

用于获取器和设置器的 Google 样式指南属性

PyQt5 获取器和设置器

Javascript:对象设置器和获取器在克隆/复制/扩展后丢失

在访问 PFObject 成员时解析“发送到实例的无法识别的选择器”

jQuery----奇偶选择器和索引选择器

子类选择器和后代选择器