在 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 值。这可能是什么原因造成的?