使用parse和ios sdk检索相关数据

时间:2014-05-01 05:36:26

标签: ios parse-platform

我只是想用Parse将相关数据检索到我的应用程序中,但是我遇到了一些问题。 我有2个表,旅行和城市,旅游有一个相关的领域叫做origin-city。我在数据浏览器中使用指针来关联它们。

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

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

}

而且我总是得到指针Id而不是城市名称,这是我真正需要的。 这是这样做的正确方法吗?我怎么能找到这个城市的名字?

修改

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

非常感谢

3 个答案:

答案 0 :(得分:2)

我假设您使用的是PFQueryTableViewController,因为方法queryForTable属于该方法。说明查询已在进行中的错误是因为PFQTVC在幕后触发了查询,因此在您的情况下无法回答要求​​findObjectsInBackgroundWithBlock的问题。

使用这个特殊的表视图控制器,cellForRowAtIndexPath也会传递PFObject,这是匹配行的对象。

要获取来自相关对象的城市名称,请在cellForRowAtIndexPath中使用此代码:

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

答案 1 :(得分:1)

我相信当你使用 - (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;

}

答案 2 :(得分:0)

检查是否:

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

  2. 来自您的Parse Web仪表板的
  3. ,确保“Travel”类中的“origin-city”列实际上是“City”类型的指针

  4. 指针指的是仍然存在的City行

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

    [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");    
    
        }
    }];
    

    希望有所帮助