Parse.com的奇怪问题,不包括密钥

Phi*_*hil 5 objective-c parse-platform

我有非常相似,这一个问题一个

基本上我正在使用Parse.com加载一些具有PFUser指针的对象,然后我也使用includeKey来包含那些PFUser,这里是代码......

PFQuery *query = [PFQuery queryWithClassName:@"GameVillageObject"];

    [query whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];
    [query includeKey:@"pfUser"];
    query.limit = 100;

    [sharedInstance requestSentWithDesc:@"Get all village objects in region"];

    [query findObjectsInBackgroundWithBlock:^(NSArray *PUObjects, NSError *error) {
        if (!error) {
            // The find succeeded.
            NSLog(@"Successfully retrieved %d village objects from server.", PUObjects.count);

            if(PUObjects.count > 0)
            {
                villageObjects = PUObjects;

                for (int i=0; i<[villageObjects count]; i++)
                {

                    PFObject *villageItem = [villageObjects objectAtIndex:i];

                    PFUser *user = [villageItem objectForKey:@"pfUser"];

                    NSString *userName = [NSString stringWithFormat:@"%@",[user objectForKey:@"username"]];

                    NSLog(@"User name is: %@.", userName);


                }


                [self setupVillageList];

                [sharedInstance centerImage:marketItemsContainer xChoice:YES yChoice:NO];

            }

        } else {
            // Log details of the failure
            NSLog(@"Getting village objects Error: %@ %@", error, [error userInfo]);

        }
    }];
Run Code Online (Sandbox Code Playgroud)

现在由于某种原因,每次出现,也可能是10次中的一次,游戏崩溃,出现此错误

密钥"用户名"没有数据.在获取其值之前调用fetchIfNeeded.

虽然我不知道当我尝试使用上面的"用户名"时它是否会崩溃,或者稍后我尝试使用"用户名"时,但无论如何,我不明白为什么大多数时候它没有问题,包括那些额外的物品,然后几次它没有.有任何想法吗?

小智 13

听起来好像user没有加载关联,但可以在大多数情况下缓存(因此可用).我可以想出两种方法来解决这个问题.

1)fetchIfNeeded按错误消息的建议进行呼叫:

PFQuery *query = [PFQuery queryWithClassName:@"GameVillageObject"];

[query whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];
[query includeKey:@"pfUser"];
...
  PFObject *villageItem = [villageObjects objectAtIndex:i];

  PFUser *user = [villageItem objectForKey:@"pfUser"];
  [user fetchIfNeeded];
  NSString *userName = [NSString stringWithFormat:@"%@",[user objectForKey:@"username"]];

  NSLog(@"User name is: %@.", userName);
Run Code Online (Sandbox Code Playgroud)

2)pfUser.usernameincludeKey:通话中指定

[query whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];
[query includeKey:@"pfUser.username"];
query.limit = 100;
...
Run Code Online (Sandbox Code Playgroud)

这应该告诉Parse在username执行查询时加载.

  • 实际上使用第二个选项会出现错误"无法包含字段用户名,因为它不是指向另一个对象的指针" (4认同)