查询Parse中的列

时间:2014-06-21 17:36:22

标签: ios parse-platform

我有一个iOS应用程序,允许用户将GeoPoints保存到Parse.com数据库表。它是一个谷歌地图应用程序,允许用户提交拉特/长坐标,一旦点数被管理员类型的人批准,这些坐标将显示在地图上。

我在Parse.com上创建了一个名为Point的表来保存此信息,该表还包含以下字段以及为您创建的默认字段:

  • approved(String)
  • point(GeoPoints)

当创建表中的新行(用户提交新点)时,“approved”始终设置为“0”,“point”将包含已上载点的Lat / Long。

管理员批准“点数”后,“已批准”设为“1”。

我查询表格以显示已批准的所有GeoPoints(设置为“1”)。

我可以获取已设置为“1”的所有行,但我不知道如何访问“点”字段。我需要为每一行获取“点”以将其显示在地图上。

以下是我要查询表格中所有“已批准”设置为“1”的点数

// Query the Database to get Points
PFQuery *query = [PFQuery queryWithClassName:@"Point"];
[query whereKey:@"approved"  equalTo:@"0"];

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
 {
     if (!error)
     {
         // The find was successful
         NSLog(@"Successfully Retrieved %d Number of Points", objects.count);

         // Display the found Points as Markers

         for (PFObject *object in objects)
         {
             NSLog(@"%@", object.objectId);

             // Tried to do this but does not work
             NSLog(@"%@", object.point);
         }
     }
     else
     {
         // Show errors
         NSLog(@"Error: %@ %@", error, [error userInfo]);
     }
 }];

一旦我有了一个对象数组,我尝试了以下内容,但这不起作用。

// Tried to do this but does not work
NSLog(@"%@", object.point);

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我认为你想要的是:

PFGeoPoint *point = object[@"point"];

有关详细信息,请参阅PFGeoPoint class reference

答案 1 :(得分:1)

您还可以使用子类化以方便使用。请参阅iOS Guide Subclassing。不要忘记在AppDelegate中注册子类。

//Point.h
#import "Parse/Parse.h"

@interface Point : PFObject  <PFSubclassing>

@property (nonatomic) BOOL approved;
@property (nonatomic, strong) PFGeoPoint *geoPoint;
+ (void)findApprovedPointsWithBlock:(PFArrayResultBlock)resultBlock;

@end

//Point.m
#import "Point.h"
#import <Parse/PFObject+Subclass.h>

@implementation Point

@dynamic approved;
@dynamic geoPoint;

+ (NSString *)parseClassName {
    return @"Point";
}

+ (void)findApprovedPointsWithBlock:(PFArrayResultBlock)resultBlock {
    PFQuery *query = [PFQuery queryWithClassName:@"Point"];
    [query whereKey:@"approved"  equalTo:@YES];

    [query findObjectsInBackgroundWithBlock:^(NSArray *points, NSError *error) {
        resultBlock(points, error); 
    }];
}

@end

// Somewhere in your code
[Point findApprovedPointsWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        for (Point *object in objects) {
            NSLog(@"%@", object.objectId);
            NSLog(@"%@", object.geoPoint);
        }
    }
    else {
    }
}];