2015-07-06 2 views
0

У меня есть PFObject Подкласс SomeClass, к которому я добавил метод iconImageNamePFObject подкласс, непризнанная селектор послан к экземпляру для пользовательского метода

.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

По documentation вы игнорировали некоторые правила подклассов:

Для создайте подкласс PFObject:
1. Объявите подкласс, который соответствует протоколу PFSubclassing.
2. Внедрить метод класса parseClassName. Это строка, которую вы должны передать initWithClassName: и делает все последующее имя класса ненужными ссылками.
3. Импортируйте PFObject+Subclass в ваш .m-файл. Это реализует все методы в 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 
+1

[сам registerSubclass] сделал трюк –

+0

Sneaky Синтаксического, я полностью пропустил [Classname registerSubclass] вещь. @PeterLapisu, вы говорите, что смогли реализовать это внутри реализации подкласса? Вызов себя? В инструкциях там говорится, что это нужно сделать до инициализации Parse, но я вижу, что это ложь/устаревшая. –

Смежные вопросы