我有一个子类ParseChild,它继承自父类PFObject:
ParseChild.h
@interface ParseChild : PFObject
+(void)findAllWithCompletion:(void(^)(ParseChild *child))handler;
@end
ParseChild.m (findAllWithCompletion返回一个PFObjects数组)。
@implementation ParseChild
+(void)findAllWithCompletion:(void(^)(ParseChild *child))handler {
PFQuery *query = [PFQuery queryWithClassName:@"TagRelationship"];
[query findObjectsInBackgroundWithBlock:^(NSArray *children, NSError *error) {
ParseChild *child = (ParseChild *) children[0];
handler(child);
}];
}
-(void)deleteWithCompletion:(void (^)(BOOL succeeded))handler {
[self deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
handler(succeeded);
}];
}
}
然后我在viewcontroller中调用findAllWithCompletion方法:
[ParseChild findAllWithCompletion:^(ParseChild *child) {
[child deleteWithCompletion:^(BOOL succeeded) {
}];
}];
即使我将PFObject父实例转换为ParseChild(ParseChild * child =(ParseChild *)children [0];),它也会给我这个错误:
- [PFObject deleteWithCompletion:]:无法识别的选择器发送到实例0x16f77fa0。
我能做些什么来解决这个问题吗?
答案 0 :(得分:0)
仅仅因为你施放对象并不意味着你改变了对象的类型。你的PFQuery返回PFObjects。编译PFObject是为了响应选定数量的选择器,deleteWithCompletion
不是其中之一。我认为你正在寻找更多的类别而不是子类的功能。
@implementation PFObject()
+(void)findAllWithCompletion:(void(^)(ParseChild *child))handler {
PFQuery *query = [PFQuery queryWithClassName:@"TagRelationship"];
[query findObjectsInBackgroundWithBlock:^(NSArray *children, NSError *error) {
PFobject *child = children[0];
handler(child);
}];
}
-(void)deleteWithCompletion:(void (^)(BOOL succeeded))handler {
[self deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
handler(succeeded);
}];
}
@end
答案 1 :(得分:0)
答案 2 :(得分:0)
在这种情况下,如果您无法修改基类
,则首选类别而不是继承<强> PFObject + Search.h 强>
@interface PFObject (Search)
+(void)findAllWithCompletion:(void(^)(PFObject *child))handler;
-(void)deleteWithCompletion:(void (^)(BOOL succeeded))handler;
@end
<强> PFObject + Search.m 强>
@implementation PFObject (Search)
+(void)findAllWithCompletion:(void(^)(PFObject *child))handler {
PFQuery *query = [PFQuery queryWithClassName:@"TagRelationship"];
[query findObjectsInBackgroundWithBlock:^(NSArray *children, NSError *error) {
handler([children firstObject]);
}];
}
-(void)deleteWithCompletion:(void (^)(BOOL succeeded))handler {
[self deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
handler(succeeded);
}];
}
@end