我想从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];
谢谢!
答案 0 :(得分:6)
这是另一种不了解异步编程性质的情况。
考虑这种情况:
你想做一个鸡蛋三明治。你把鸡蛋煮沸,然后设置一个警报,让它们煮熟时将它们取出来,剥掉它们,将它们切碎并加到你的三明治中。等你拿着面包和黄油,然后等待闹钟响起。
你打电话给findObjectsInBackgroundWithBlock
正在煮鸡蛋。你通过它的块是闹钟以及你计划用鸡蛋煮熟的东西。
上面的代码类似于将鸡蛋煮沸,然后立即尝试在三明治上使用未煮熟/部分煮熟的鸡蛋。到那时他们可能已经或可能没有烹饪。通常它会造成很大的混乱。
一种解决方案是在块的末尾调用方法传递给方法。