PFObject子类,发送给自定义方法实例的无法识别的选择器



我有一个PFObject子类SomeClass,我添加了一个方法iconImageName

. h

@interface SomeClass : PFObject
@property (nonatomic, strong) NSDictionary * availableAttributes;
@property (nonatomic, strong) NSString * type;
- (NSString *)iconImageName;
@end

m

@implementation SomeClass
@dynamic availableAttributes;
@dynamic type;
+ (NSString *)parseClassName {
    return NSStringFromClass([self class]);
}
- (NSString *)iconImageName {
    return [NSString stringWithFormat:@"icon-type-%@", self.type];
}
@end

但是在调用

之后

[object iconImageName] i get

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PFObject iconImageName]: unrecognized selector sent to instance 0x174133b00'

我可以确认对象确实是SomeClass

当我使用类方法+

时也会发生这种情况

根据文档,您忽略了一些子类化规则:

创建PFObject子类。1. 声明一个符合PFSubclassing协议的子类。
2. 实现类方法parseClassName。这是您将传递给initWithClassName:并使所有未来类名的字符串不必要的引用。
3.在.m文件中导入PFObject+Subclass。这实现了PFSubclassingparseClassName之外的所有方法。
4. 在解析setApplicationId:clientKey:之前调用[YourClass registerSubclass]

试着为你的类满足这些规则。

的例子:

// Armor.h
@interface Armor : PFObject<PFSubclassing>
+ (NSString *)parseClassName;
@end
// Armor.m
// Import this header to let Armor know that PFObject privately provides most
// of the methods for PFSubclassing.
#import <Parse/PFObject+Subclass.h>
@implementation Armor
+ (void)load {
  [self registerSubclass];
}
+ (NSString *)parseClassName {
  return @"Armor";
}
@end

最新更新