从PFObject访问NSArray中的项目

时间:2014-07-28 14:27:43

标签: ios objective-c parse-platform

我在Parse.com的iOS后端构建一个应用程序,它具有简单的关注/跟随逻辑。即我希望用户能够找到其他用户并关注他们的个人资料。我目前可以使用常规PFQuery检索数据库中的所有用户。点击用户个人资料图片""那个人。设置数据,以便名为isFollowing的数组中添加了一个唯一对象,用户可以选择关注每个新对象。它由用户objectId添加。

但是,我在这里碰到了路;对于一个单独的屏幕,我只想返回我作为用户关注的人数。这是访问数据的查询:

- (void)viewDidAppear:(BOOL)animated
{
    PFQuery *followingQuery = [PFUser query];
    [followingQuery whereKey:@"objectId" equalTo:[PFUser currentUser].objectId];
    [followingQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error)
        {
            NSLog(@"User test: %@", [objects valueForKey:@"isFollowing"]);
            PFQuery *imagesQuery = [PFUser query];
            [imagesQuery whereKey:@"objectId" containedIn:[objects valueForKey:@"isFollowing"]];
            [imagesQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
            {
                if (!error)
                {
                    NSLog(@"Username? %@", [objects valueForKey:@"username"]);
                }
                else
                {
                    NSLog(@"Something went wrong. %@", error);
                }
            }];
        }
        else
        {
            NSLog(@"Something went wrong: %@", error);
        }
    }];
    [super viewDidAppear:animated];
}

目前,user test: %@提供输出:

2014-07-28 10:17:58.537 YouStreamSport[11276:60b] User test: ( ( bHul1vkkmB, brsN8PRUBO ) )

但是,当我运行objects.count时,它会返回一个对象。因此,我无法遍历数组对象来查找并返回正确的配置文件图像。由于数组对象返回1,但数组本身有2个对象,如何访问该数组中的项?任何使用[objectAtIndex: ...]访问的尝试都会导致崩溃。

感谢提前输入。

2 个答案:

答案 0 :(得分:2)

我不确定如何访问数组中数组中的单个项目,但是由于@Droppy的帮助,我能够解决问题。这是我现在使用的代码:

- (void)viewDidAppear:(BOOL)animated
{
PFQuery *followingQuery = [PFUser query];
[followingQuery whereKey:@"objectId" equalTo:[PFUser currentUser].objectId];
[followingQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error)
    {
        self.array = [objects valueForKey:@"isFollowing"];
        NSLog(@"User test: %@", self.array);
        for (int i = 0; i <= self.array.count; i++)
        {
            NSLog(@"User %d: %@", i, [[[objects valueForKey:@"isFollowing"] objectAtIndex:0] objectAtIndex:i]);
        }
    }
    else
    {
        NSLog(@"Something went wrong: %@", error);
    }
}];
[super viewDidAppear:animated];
}

结果输出如下:

2014-07-28 10:53:16.155 appName[11416:60b] User 0: bHul1vkkmB 2014-07-28 10:53:16.156 appName[11416:60b] User 1: brsN8PRUBO

谢谢!

答案 1 :(得分:1)

如上所述,您只会显示一个对象用户名。而不是尝试通过索引访问它们尝试迭代结果如下所示。我还建议不要对内部和外部查询使用变量对象。试试这个:

[imagesQuery findObjectsInBackgroundWithBlock:^(NSArray *myObjects, NSError *error)
{
  if (!error){
    if (myObjects.count) {
      for (PFObject *item in myObjects){
        NSLog(@"Username: %@", [item valueForKey:@"isFollowing"]);
      }
    }
  }else{
    NSLog(@"Something went wrong. %@", error);
  }
}];