0

我有一个 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]我明白了

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

我可以确认该对象确实是 SomeClass

当我使用类方法时也会发生这种情况 +

4

1 回答 1

4

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

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

尝试为您的班级满足此规则。

例子:

// 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
于 2015-07-06T15:27:02.003 回答