2

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

4

1 回答 1

0

当连接到 Xcode 时,Metal 并不真正适用于 iOS 8.3。现在,禁用 GPU 帧捕获,并归档雷达。

于 2015-04-12T14:19:03.107 回答