2014-10-11 61 views
2

我子类的PFObject下面的类(动态性能和+负载& parseClassName方法在.m文件)PFUser财产上的子类PFObject

@interface DAOpponents : PFObject <PFSubclassing> 
@property (nonatomic, strong) PFObject* fromUser; 
@property (nonatomic, strong) PFObject* toUser; 
@property (nonatomic) BOOL isVisible; 
@property (nonatomic) BOOL isPersistent; 
+ (NSString *)parseClassName; 
@end 

在单元测试我尝试创建一个样DAOpponents-对象:

DAOpponents* follow = [DAOpponents object]; 
follow.fromUser = user1; // caught "NSInvalidArgumentException", "PFObject values may not have class: PFUser" 
follow.toUser = user2; 
[follow save]; 

如果我做同样没有对手的一个子类的版本有没有异常

PFObject* follow = [[PFObject alloc] initWithClassName:@"DAOpponents"]; 
[follow setObject:user1 forKey:@"fromUser"]; // no exception!!! 
[follow setObject:user1 forKey:@"toUser"]; 

为什么子类PFObject不能指向PFUser对象?

任何帮助表示赞赏!非常感谢!

+0

你试过声明FROMUSER和TOUSER为'PFUser *''不* PFObject'? – Paulw11 2014-10-11 19:40:45

+0

@ Paulw11是的,我甚至试图手动覆盖setter/getter(没有动态生成)和一个强制转换“(PFObject *)user1;”太。 – cakl 2014-10-11 19:43:36

回答

2

我能够解决这个问题首先继承PFUser,然后在我的其他PFObject子类中使用名为User的子类。

我PFUser子类,User.h:

#import <Parse/Parse.h> 

@class Person; 
@class Parish; 

@interface User : PFUser<PFSubclassing> 
//+ (NSString *)parseClassName; 

// Return the current user 
+ (User *)currentUser; 

@property (retain) NSNumber *acceptedAgreements; 
@property (retain) NSNumber *isAdmin; 
@property (retain) Person *person; 

@end 

和我User.m:

#import "User.h" 
#import <Parse/PFObject+Subclass.h> 
#import "Person.h" 

@implementation User 

@dynamic acceptedAgreements; 
@dynamic isAdmin; 
@dynamic person; 

//+ (NSString *)parseClassName { 
// return @"User"; 
//} 

// Return the current user 
+ (User *)currentUser { 
    return (User *)[PFUser currentUser]; 
} 

@end 
+0

谢谢,它的工作原理,但:我必须覆盖PFUser的所有静态方法?这是一个错误还是为什么我要这样做? – cakl 2014-10-12 16:20:11

+0

PFUser是PFObject的一个特殊的超类(所以说parse.come员工在这里:https://www.parse.com/questions/get-pfuser-in-pfquery-using-ios-api),所以你需要对待它的实例有点不同,如果它是一个子类。我不认为你必须重写所有的静态方法 - 我不需要这样做。 – 2014-10-12 20:36:00

+0

为什么你重写'currentUser'? '[PFUser currentUser]'返回'instancetype'。调用用户这应该返回一个用户对象(而不是PFUser)。或者我错了? – cakl 2014-10-12 20:55:23