我正在尝试从当前用户的行中检索数据并将其显示在他们的个人资料中。 (诸如firstName,lastName,email,postalCode等数据 - 这些都在不同的列中)。我可以使用以下方法检索所有数据:
PFUser *currentUser = [PFUser currentUser];
if (currentUser != nil) {
NSLog(@"Current user: %@", currentUser.username);
PFQuery *query = [PFUser query];
[query whereKey:@"username" equalTo:currentUser.username];
NSArray *data = [query getObjects];
NSLog(@"%@", data);
}
但我不认为我可以通过这种方法分离数据。它只能一次显示所有内容。我希望它分配给单独的标签来显示firstName,lastName等。
答案 0 :(得分:1)
无论你使用什么方法来查询currentUser,你(希望)都会返回一个PFObject。由于PFObject本质上是一个字典,因此您只需拥有该用户的所有数据即可访问对象的键值对。
我认为KVC不仅仅是在currentUser类上调用方法,因为您可以轻松查询自定义字段。
以下是我查询currentUser并设置其个人资料的解决方案。
ProfileVC.h
@property (nonatomic, strong) PFUser *profileToSet;
ProfileVC.m
-(void)setProfile{
PFQuery *query = [PFUser query];
[query whereKey:@"objectId" equalTo:[[PFUser currentUser]objectId]];
[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * _Nullable error) {
if (error) {
NSLog(@"error: %@",error);
} else {
self.profileToSet = [objects firstObject];
// Do the rest of the setup with the profileToSet PFUser PFObject.
}
}];
答案 1 :(得分:0)
你正在做的是从你的查询打印出完整的结果数组,这就是为什么看起来所有的字段都放在一起(当它们不是真的时)。如果您想从当前用户的Parse检索/刷新数据,那么有更好的方法。使用fetch
。
PFUser *currentUser = [PFUser currentUser];
if (currentUser != nil) {
NSLog(@"Current user: %@", currentUser.username);
[currentUser fetch];
// Now your currentUser will be refreshed...
NSLog(@"First: %@, postcode: %@", currentUser[@"firstName"], currentUser[@"postalCode"]); // Assuming those keys exist.
}
它将确保仅返回当前用户,而不是直接运行PFQuery
。您不需要检查数组长度,也不需要抓取第一个对象。
正如评论中所述,你应该看看使用fetchInBackgroundWithBlock:
,因为它(1)不会阻止,(2)如果出现问题就会给你一个错误。