2014-10-11 70 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