0

我想从 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,它们只显示 Coordinaten 的值。Name = results仅在名称下。

NSArray坐标 / 名称在 .h 中减速

接下来是,我如何使用这些 NSArrays 设置标题和坐标

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

谢谢!

4

1 回答 1

6

这是不了解异步编程本质的又一个案例。

考虑这种情况:

你想做一个鸡蛋三明治。你把鸡蛋煮沸,并在它们煮熟时设置警报,以便将它们取出、剥皮、切碎并添加到三明治中。当你等待时,你得到面包和黄油,然后等待警报响起。

你的电话findObjectsInBackgroundWithBlock是把鸡蛋煮沸。您通过的街区是警报,以及您打算如何处理煮熟的鸡蛋。

您上面的代码类似于将鸡蛋煮沸,然后立即尝试在三明治上使用未煮过/半熟的鸡蛋。到那时,他们可能已经煮熟了,也可能煮得不够熟。通常它会造成很大的混乱。

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

于 2013-11-26T00:04:12.663 回答