【问题标题】:iOS 8.3 - Metal, found nil while unwrapping an Optional ValueiOS 8.3 - Metal,在展开可选值时发现 nil
【发布时间】:2015-04-12 00:04:31
【问题描述】:

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

【问题讨论】:

  • 不相关的注释,ASVertices 应该是 asVertices - 按照约定,变量以小写字母开头。类和类型以大写字母开头。 A 对于您崩溃的实际原因,您是否尝试过单步执行以查看故障发生在哪里? Swift 因给出误导性异常位置而臭名昭著
  • 不,只是顶点。 AS 是前缀,不是 Swift。

标签: ios metal


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多