并不总是调用iOS MKMapShapshotter完成块

vm2*_*000 10 mapkit grand-central-dispatch ios ios7 mkmapsnapshotter

我正在尝试使用新的iOS7 MKMapSnapshotter来生成静态地图图像.每当我的应用需要地图时,我都会调用以下内容:

MKMapSnapshotter *snapshotter = [[[MKMapSnapshotter alloc] initWithOptions:theOptions] autorelease];
dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
DebugLog(@"Snapshotter allocated %@ and run on queue %@", snapshotter, aQueue);

[snapshotter startWithQueue:aQueue completionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
    DebugLog(@"Snapshotter completion block %@", snapshotter);
    // perform selector on main thread to set self.imageView.image = shanpshot.image;
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,这很有效.但有时,似乎设备因地图请求而过载,然后停止渲染.在我的日志文件中,我将看到关于"已分配的Snapshotter"的第一个日志语句,但从未看到"Snapshotter完成块"消息.

是否有可能我的请求永远不会从调度队列中执行?有没有人遇到过这个问题?

Cas*_*sey 0

由于快照程序不是属性,因此可能会出现此问题,因此它在离开此范围后很快就会自动释放。保留快照程序作为属性应该可以解决这个问题。