在 Apple 发布 iOS 8.3 之前,我的代码可以工作,但是由于更新的 XCode 提示找到了一个 nil 值,即使我的值都不是 nil(我在调试时验证了这一点)。
为了理智,我重新编写了我的程序,用 Metal 在屏幕上渲染一个简单的三角形,但抛出了同样的错误。我有一个包含 3 个顶点的数组,然后将其乘以数组大小以获得缓冲区的大小并传入 OptionCPUCacheModeDefault
正如我认为通过 nil
参数可能是导致我的问题的原因。
// Test array of vertices
let ASVertices:[Float] = [
0.0, 1.0, 0.0,
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0
]
// Other Metal init code...
// Set the buffers
let dataSize = ASVertices.count * sizeofValue(ASVertices[0])
vertexBuffer = ASDevice.newBufferWithBytes(ASVertices,
length: dataSize,
options: MTLResourceOptions.OptionCPUCacheModeDefault)
当我调试时,我可以看到
dataSize
正如预期的那样是 36 (9*4),所以我很困惑为什么我会得到 fatal error when unwrapping an optional value
.我知道错误是不言自明的,但上面打印的代码是堆栈跟踪显示引发异常的地方,但我在那里看不到 nil 值。这可能是什么原因造成的?
最佳答案
当连接到 Xcode 时,Metal 并不真正适用于 iOS 8.3。现在,禁用 GPU 帧捕获,并归档雷达。
关于iOS 8.3 - Metal,在展开可选值时发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29584463/