【问题标题】:PFObject subclass, unrecognized selector sent to instance for custom methodPFObject 子类,无法识别的选择器发送到自定义方法的实例
【发布时间】:2015-07-06 15:10:08
【问题描述】:

我有一个 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

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

【问题讨论】:

    标签: ios objective-c parse-platform parse-framework


    【解决方案1】:

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

    创建PFObject 子类:
    1.声明一个符合PFSubclassing协议的子类。
    2.实现类方法parseClassName。这是您将传递给 initWithClassName: 的字符串,它使所有未来的类名 不必要的参考。
    3. 在您的 .m 文件中导入PFObject+Subclass。这实现了PFSubclassing 中超出parseClassName 的所有方法。
    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
    

    【讨论】:

    • Sneaky Parse,我完全错过了 [className registerSubclass] 的事情。 @PeterLapisu,您是说您可以将其放入子类的实现中吗?打电话给自己?那里的说明说必须在初始化 Parse 之前完成,但我可以看到这是错误的/过时的。
    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多