【问题标题】:Retrieve related data with parse and ios sdk使用 parse 和 ios sdk 检索相关数据
【发布时间】:2014-05-01 05:36:25
【问题描述】:

我只是想用 Parse 将相关数据检索到我的应用程序中,但我遇到了一些问题。 我有 2 张表,Travel 和 City,Travel 有一个名为 origin-city 的相关字段。我在数据浏览器中使用指针来关联它们。

所以在 queryForTable 方法中我正在使用

- (PFQuery *)queryForTable {
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
    [query includeKey:@"origin-city"];
    return query;

}

而且我总是得到指针 ID,但不是我真正需要的城市名称。 这是这样做的正确方法吗?我怎样才能检索到城市的名称?

编辑

当我打印起始城市时,我得到 City:M0PwR0OiLj:(null) 其中 M0PwR0OiLj 是 City 的 objectId,这里我需要名称

非常感谢

【问题讨论】:

    标签: ios parse-platform


    【解决方案1】:

    我假设您使用的是PFQueryTableViewController,因为方法queryForTable 属于它。说明查询已在进行中的错误是因为查询是由 PFQTVC 在幕后触发的,因此在您的情况下,要求执行 findObjectsInBackgroundWithBlock 的答案是不可能的。

    有了这个特殊的表格视图控制器,cellForRowAtIndexPath 也被传递了一个PFObject,这是匹配行的对象。

    要从 related 对象中获取城市名称,请在 cellForRowAtIndexPath 中使用此代码:

    PFObject *city = object[@"origin-city"];
    [cell.textLabel setText:city[@"name"]; // The name column from the City class
    

    【讨论】:

      【解决方案2】:

      我相信当您使用 - (PFQuery *)queryForTable 时,它​​会返回它提取的结果 索引路径处的行单元格,因此您可以尝试这样的操作

      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
      
      static NSString *CellIdentifier = @"Cell";
      
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (cell == nil) {
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
      }
      
       [cell.textLabel setText:[object objectForKey:@"origin-city"]];
      
      return cell;
      

      }

      【讨论】:

      • 嗨 @zoruc 我用 [object objectForKey:@"origin-city"]]; 得到的值更新了我的答案
      【解决方案3】:

      检查是否:

      1. self.parseClassName 包含类名字符串“Travel”

      2. 在 Parse Web 仪表板中,确保“Travel”类中的“origin-city”列确实是“City”类型的指针

      3. 指针指向仍然存在的城市行

      请记住,结果查询中不会返回每个空字段(从 Web 仪表板中,您可以看到带有“未定义”占位符的字段/列)。所以这意味着如果你在“城市”类名中有一个空的(所以,未定义的)列“名称”,你将无法读取它。无论如何选择应该是这样的:

      [query findObjectsInBackgroundWithBlock:^(NSArray * travels, NSError *error) {
      
          if (error) 
              return;
      
          for (PFObject *travelX in travels) {
      
              PFObject *city = travelX[@"origin-city"]; // or [travelX objectForKey:@"origin-city"] if you prefer
      
              if (city){
      
                  NSString* objectId = city.objectId;
                  NSDate* createdAt = city.createdAt;
                  NSString* cityName = city[@"name"];
                  NSLog("The city name is %@", ( cityName ? cityName : @"<NOT DEFINED>" ) );
      
              }else
                  NSLog(@"%@",@"There is no city for this travel");    
      
          }
      }];
      

      希望对你有帮助

      【讨论】:

      • 嗨@Luca laco 感谢您的帮助,我检查了以上 3 个步骤,一切都很好,所以我将您的代码放在 [query includeKey:@"origin-city"]; 行,现在我得到 此查询具有出色的网络连接。你必须等到它完成。
      • 查询是否可能已经在进行中?尝试在 [查询 findObjectsInBackgroundWithBlock: ....] 之前调用 [查询取消]。你也有最新的 SDK 版本吗?检查这篇文章,可能会有所帮助parse.com/questions/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2015-05-21
      • 2021-05-16
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多