指针没有获取数据的pfuser

时间:2014-06-08 13:19:27

标签: ios xcode parse-platform

我已经将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

2 个答案:

答案 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);
}

}];

希望这行得通。希望对您有所帮助!