【问题标题】:ASSIHTTPRequest for Annotations and Overlays- Map View iOS用于注释和覆盖的 ASSIHTTPRequest - Map View iOS
【发布时间】:2012-09-16 19:11:35
【问题描述】:

假设您从不同的两个 URL 获取日期,一个用于地图叠加,另一个用于注释,如下所示。有两种方法(plotAnnotations 和 plotOverlays)处理 JSON 数据并将它们绘制在地图上看法。我只是想确定一下,还有其他方法吗?如何检查/知道注释和覆盖是否同时出现?我很高兴听到任何反馈或 cmets。提前致谢。

_weak ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1];
[request1 setCompletionBlock:^{
    NSString *responseString = [request1 responseString];
    [self plotAnnotations:responseString];

}];
[request1 setFailedBlock:^{
    NSError *error=[request1 error];
    NSLog(@"Error: %@", error.localizedDescription);
}];
[request1 startAsynchronous];

 __weak ASIHTTPRequest *request2 = [ASIHTTPRequest requestWithURL:url2];
[request2 setCompletionBlock:^{
    NSString *responseString2 = [request2 responseString];
    [self plotOverlays:responseString2];
}];
[request2 setFailedBlock:^{
    NSError *error=[request2 error];
    NSLog(@"Error: %@", error.localizedDescription);
}]; 

   [request2 startAsynchronous];

【问题讨论】:

  • 我应该使用任何线程来确保同时读取数据吗? [self performSelectorOnMainThread:@selector() withObject:nil waitUntilDone:false];

标签: ios asihttprequest mkannotation mkoverlay


【解决方案1】:

您应该看看 GCD(Grand Central Dispatch)。 GCD docs。创建一个包含您的请求的调度组,当它们都完成下载时,您可以使用它来处理您的注释和覆盖 - 假设这是您想要做的,它并不完全清楚,但这就是您的评论似乎暗示。

【讨论】:

  • 您好 Paul,非常感谢您给我反馈。我肯定会查看 GCD 文档和 Internet 上提供的示例。我只是想知道如果我实现上面发布的那个会发生什么。会有什么风险?
  • PerformSelctor 被低估了,但它并不能真正做到你想要的。问题是您的调用是异步的,因此这两个块将独立执行,可能在方法完成后返回 - 因此调度组会很好。将调用转换为同步调用可以让您将它们有效地分组在一个块中,但效率低下。
  • 您好 Paul,非常感谢您再次快速回复。只是想确保在上面的代码中将调用从异步更改为同步会更好,对吗?我只想先测试我的应用程序以获得快速结果。那我肯定会专注于GCD。提前致谢。
  • 如果您将上述两个调用都更改为同步调用,您将能够在代码块的末尾假设两者都已完成,是的。可以进行测试,但我不希望生产代码这样做 - 这就是 gcd 的用武之地。
  • 您应该按照建议查看 Breadcrumbs 示例代码,它非常有用。此外,您的 plotOverlay 每次调用时都会绘制额外的叠加层。你需要几个阶段的改变才能让它做你想做的事。一次尝试一件事:-)。此外,如果你最终使用 GCD,你可以在调度队列中做一些缓慢的事情,但必须调用主队列来执行任何 UIKit/绘图。
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
相关资源
最近更新 更多