我已经将PFuser子类化并注册了它。它很棒。
在User表的数据库中,我指向了另一个包含更多信息的表。
应用程序因此错误而崩溃:
2014-06-08 15:14:59.550 App[2333:60b] *** Terminating app due to uncaught exception
'NSInternalInconsistencyException',
reason: 'Key "place" has no data. Call fetchIfNeeded
before getting its value.'
在检查调试器时,我可以看到它连接到另一个表,但所有字段都是空的。
我想我需要这样做:[query includeKey:@"company"];
对于指针,但我不对User类进行查询...
我需要在某处覆盖它吗?
这是我的自定义用户类:
-h file
#import "Company.h"
@interface PFCustomUser : PFUser<PFSubclassing>
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) UIImage *userPhoto;
@property (nonatomic, retain) Company *company;
+ (PFCustomUser *)currentUser;
-m file
#import "PFCustomUser.h"
@implementation PFCustomUser
@dynamic name,userPhoto,company;
+ (PFCustomUser *)currentUser {
return (PFCustomUser *)[PFUser currentUser];
}
在appdelegate中我这样做
[PFCustomUser registerSubclass];
所以技术上我会在控制器中做到这一点
PFCustomUser *currentUser = [PFCustomUser currentUser];
NSLog(@"%@",currentUser.company.place);
公司是nill所以地方是nill。因此错误.. 在调试器中,您可以看到它看到公司的objectId和类名,但其余的是nill
答案 0 :(得分:0)
你必须添加一个setter&amp;每个指针或关系的getter ..
.h文件
@property (retain) PFRelation *likes;
.m文件
@synthesize likes = _likes;
- (void) setLikes:(PFRelation *)likes{
_likes = likes;
}
- (PFRelation *) likes{
if(_likes== nil) {
_likes = [self relationforKey:@"likes"];
}
return _likes;
}
示例代码:
PFPlace *place = [PFPlace object];
place.name = @"Taiwan";
[person save];
[place save];
[place.likes addObject:person]
[place save];
https://www.parse.com/questions/pfobject-subclassing-with-pfrelation-as-attribute
答案 1 :(得分:0)
代码中的问题是,在currentUser.company.place中使用“ Company”对象时没有获取
当您获取currentUser时,它仅获取有关parse类Type(在这种情况下为“ Company”类)的属性的基本信息,如objectId等。这就是为什么您在调试器中获得company的objetId,而currentUser.company.place为nil的原因(因为尚未提取实际对象)。
要解决此问题:
您必须使用“ fetchIfNeeded”方法分别获取Parse类类型的每个属性(无论您希望在何处实现它->您的选择)。
所以我们的代码可能看起来像这样:
PFCustomUser *currentUser = [PFCustomUser currentUser];
Company *company = currentUser.company;
[company fetchIfNeededInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) {
//Handle error here
}
else
{
//company.place can be fetched here
NSLog(@"%@",company.place);
}
}];
希望这行得通。希望对您有所帮助!