目标C - Parse.com保存并读取地理位置IOS

时间:2013-11-24 22:04:08

标签: ios geolocation parse-platform geopoints

我想从Parse数据库中读取地理位置,并在地图中显示其他用户的位置。

我将位置写入解析数据库:

 [PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
    if (!error) {




       [[PFUser currentUser] setObject:geoPoint forKey:@"currentLocation"];
        [[PFUser currentUser] saveInBackground];

然后我阅读了用户名和位置

     PFQuery *User = [PFUser query];
    [User selectKeys:@[@"username"]];
    [User findObjectsInBackgroundWithBlock:^(NSArray *results, NSError *error) {


        Name = results;


              }];

    PFQuery *Location = [PFUser query];
    [Location   selectKeys:@[@"currentLocation",]];
    [Location findObjectsInBackgroundWithBlock:^(NSArray *location, NSError *error)
     {


        Coordinaten = location;

 }];




    NSLog(@" %@ hat die %@",Name , Coordinaten);
   // ann.title = [Name objectAtIndex:1] ;
   // ann.coordinate = [[Coordinaten objectAtIndex:1] coordinate];
  //  [MapView addAnnotation:ann];

第一个问题是,NSLog没有显示任何内容。当我复制NSLog下的Coordinaten = Location时,他们只显示了Coordinated的值。仅在Name = results下名称。

NSArray Coordinated / Names在.h

中减速

下一步是,我如何设置这些NSArrays的标题和坐标

 // ann.title = [Name objectAtIndex:1] ;
   // ann.coordinate = [[Coordinaten objectAtIndex:1] coordinate];
  //  [MapView addAnnotation:ann];

谢谢!

1 个答案:

答案 0 :(得分:6)

这是另一种不了解异步编程性质的情况。

考虑这种情况:

你想做一个鸡蛋三明治。你把鸡蛋煮沸,然后设置一个警报,让它们煮熟时将它们取出来,剥掉它们,将它们切碎并加到你的三明治中。等你拿着面包和黄油,然后等待闹钟响起。

你打电话给findObjectsInBackgroundWithBlock正在煮鸡蛋。你通过它的块是闹钟以及你计划用鸡蛋煮熟的东西。

上面的代码类似于将鸡蛋煮沸,然后立即尝试在三明治上使用未煮熟/部分煮熟的鸡蛋。到那时他们可能已经或可能没有烹饪。通常它会造成很大的混乱。

一种解决方案是在块的末尾调用方法传递给方法。