gpt4 book ai didi

ios - ios 8 中不支持的帧缓冲区格式

转载 作者:行者123 更新时间:2023-12-01 18:54:25 25 4
gpt4 key购买 nike

场景是基本的:
有 2 个 View Controller - 一个普通的(其中只有一个按钮)和一个 mapview Controller ,其中包含 mapkit mapview。

在 map 中有一个带有标注的注释,单击该标注时,会将普通 View Controller 推送到导航 Controller 。在普通 Controller 中,当单击按钮时,它会插入 mapview Controller (一个新实例)。

因此,这样做大约 22 次会导致 map 图 block 不显示,并且 map View 会闪烁。如果回到以前的 map Controller , map 显示和运行良好。

出现闪烁时,在调试中多次打印出此错误

ERROR /SourceCache/VectorKit/VectorKit-992.19/GeoGL/GeoGL/GLCoreContext.cpp 1251: Unsupported framebuffer format

这是使用 ipad 4、ios 8.1.3 完成的

这是一个已知的问题?

最佳答案

您有 21 个 Map Kit View Controller 。每个 View Controller 都设置了一个帧缓冲区来渲染矢量 map 数据。当您的设备尝试设置最后一个 View Controller 时,它无法再分配一个缓冲区。但是代码会继续执行一小段时间。然后其他一些代码尝试使用该坏缓冲区,并发出您看到的错误。

解决这个问题的方法是不要制作那么多 Map Kit View Controller 。不用推送新的 View Controller ,而是使用 - setViewControllers:animated: UINavigationController 的方法交换你的两个 Controller 。如果您现在只是推送 View Controller 的新副本,请尝试以下操作:

NSMutableArray *vcArray = [self.navigationController.viewControllers mutableCopy];
if (vcArray.count > 1) {
UIViewController *backVC = vcArray[vcArray.count - 2];
vcArray[vcArray.count - 2] = self;
vcArray[vcArray.count - 1] = backVC;
[self.navigationController setViewControllers:vcArray animated:YES];
} else {
[self.navigationController pushViewController:[self otherVC] animated:YES];
}

这假设您有一个方法 -otherVC出售适当的 View Controller 。这也假设只使用了这两个 View Controller ,因此您可能需要更改 if 语句以适应应用程序功能的逻辑。

我能想到为什么你真的需要 21 个不同的 Map Kit View Controller 的唯一原因是因为每个 Controller 都需要在 map 上显示不同的位置。使用其他方法来存储每个 View Controller 的位置,然后在每次显示时将该信息推送到一个 map 。您可以保存一些值,例如 map 的位置和放大倍数,而不是设置完整 map View Controller 所需的所有额外存储空间。

关于ios - ios 8 中不支持的帧缓冲区格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721437/

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