【问题标题】:Access object of to-many relationship对多关系的访问对象
【发布时间】:2014-06-07 08:22:24
【问题描述】:

我有一个具有一对多关系的对象。它去锻炼>锻炼分数。如果我有锻炼分数,我如何访问锻炼?我正在使用 Parse.com。

假设 trainingScore 是一个 PFObject,并且已被检索,我有一个名为 whichWorkout 的关系。返回的对象是锻炼,但是我无法访问它的属性。我做错了吗?

// Assuming this score has been retrieved by a PFQuery
PFObject *workoutScore;
PFObject *actualWorkout = workoutScore[@"whichWorkout"];
// Now when I try to access a property of actualWorkout, I can't
NSString *name = actualWorkout[@"name"];

如果我只查询实际的锻炼,同样的代码可以工作。有没有办法使用 Parse 访问通过指针关系检索到的对象的属性?

【问题讨论】:

    标签: objective-c parse-platform


    【解决方案1】:

    如果您在锻炼评分上运行查询,您应该使用[query include:@"workout"]。这将拉出指向的对象(实际锻炼)并在一次调用中获得您需要的一切

    PFQuery query = [PFQuery queryWithClassName:@"WorkoutScore"];
    [query includeKey:@"workout"];
    [query findAllInBackground....
    

    另一个选项是在实际锻炼中调用 fetch。这将是您获取锻炼得分后的第二次调用。如果您知道您将需要锻炼,那么在使用包含查询期间可能会更好地获得锻炼。

    PFObject *actualWorkout = workoutScore[@"whichWorkout"];
    
    // There are asynchronous versions of fetch too
    // which would be recommended
    [actualWorkout fetch]; 
    
    // actualWorkout will now have its data.
    NSString *name = actualWorkout[@"name"];
    

    【讨论】:

      【解决方案2】:

      如果 WorkoutScore 有一个指向 Workout 的反向指针(它看起来像在您的代码中,称为 whichWorkout),那么这很容易。查询 WorkoutScore 时,使用includeKey: 主动获取相关对象:

      [workoutScoreQuery includeKey:@"whichWorkout"];
      

      【讨论】:

        【解决方案3】:

        如果多对多关系是 PFRelation,则必须在第二步对其进行查询

        PFRelation *relation = [parseObject relationForKey:@"relationName"];
        PFQuery *query = [[relation query] findObjectsInBackground:...];
        

        如果多对多关系只是一个指针数组,则需要告诉查询包含实际数据:

        [workoutScoreQuery includeKey:@"whichWorkout"];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-12
          • 2012-04-30
          • 2017-08-08
          • 1970-01-01
          • 1970-01-01
          • 2018-11-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多