gpt4 book ai didi

ios - 从解析加载对象并显示在 map 上

转载 作者:行者123 更新时间:2023-11-29 01:57:50 24 4
gpt4 key购买 nike

开发一款允许用户查看本地人(企业、学校或个人)发布的内容的应用程序。我能够发布信息并将其保存以进行解析。我还可以下载当前位置附近的用户数据,但问题是我的辅助方法不会在应用程序首次启动时立即执行此操作。

我尝试在 viewDidLoad、viewWillAppear 和 viewDidAppear 中调用下面的辅助方法,但没有成功。当用户最初打开应用程序并转到 map 时,postArray 始终为 null。如果我移动到另一个屏幕并返回到 mapVC,数据就在那里......(我 NSlog the postArray)并且打印出当前位置附近的所有帖子。本地图显示用户的位置时,我希望最初就拥有这些数据。

问题。

  • 我应该在哪里调用我的辅助方法?当应用程序启动时,我想有数据,所以我可以在 map 上显示它。
  • 我需要编写另一种方法吗?
  • 是不是现在的方法有问题。

- (void)loadLocalPosts {
NSLog(@"Querying for Local Posts");
[activityIndicator startAnimating];
PFQuery *query = [PFQuery queryWithClassName:@"Post"];
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError
*error) {
geopoint = geoPoint;
[query whereKey:@"location" nearGeoPoint:geoPoint];
[query setLimit:50];
[query addDescendingOrder:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
postArray = objects;

}];
}];
}

最佳答案

这里的问题是 postArray 是在后台线程中填充的,您的应用程序初始化速度快于填充数组的速度。这在异步编程中很常见。解决此问题的方法是让 map 在主线程中 刷新。

- (void)loadLocalPosts {
NSLog(@"Querying for Local Posts");
[activityIndicator startAnimating];
PFQuery *query = [PFQuery queryWithClassName:@"Post"];
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError
*error) {
geopoint = geoPoint;
[query whereKey:@"location" nearGeoPoint:geoPoint];
[query setLimit:50];
[query addDescendingOrder:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
postArray = objects;
dispatch_async(dispatch_get_main_queue(),^
{
// update view properties, refresh etc.
});
}];
}];

注意:所有与 View 相关的修改都应始终发生在主线程中。因此 dispatch_get_main_queue()。但是,现在主循环可能正在执行与 View 相关的操作,因此同步调用会使应用程序崩溃。因此使用了 dispatch_async。这会将 block 添加到下一个运行循环,以便在当前运行循环之后执行。

关于ios - 从解析加载对象并显示在 map 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com