@Update 2:我能够使用 SwiftDictionary
文字修复它。
videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA)]
首先,快速免责声明:这是我对代码的第一次真实体验(如果这个问题特别愚蠢,我很抱歉!),我正在运行 Xcode 7,它处于测试阶段,所以我想明确这可能是当前版本(7.0 beta 3 (7A152u))中的一个错误。然而,我一无所知——我不确定这是我的错还是 Xcode 的错。(这就是为什么我要问而不是提交错误报告 - 我没那么自信)
话虽如此,我似乎无法像在 Xcode 6 上所做的那样为我的 AVCaptureVideoDataOutput 变量定义 videoSettings。我尝试了很多不同的方式,其中大部分是从以前的 Stack Overflow 问题中得到的,但是没有工作。该应用程序不是基于 Xcode 7 构建的,但在 iOS 8 上运行、在 Xcode 6 上编译的代码在更新后也在 iOS 9 上运行,没有问题。
我查看了 Apple 的文档,似乎没有任何改变,我也找不到任何有用的代码。我检查了 AVCaptureVideoDataOutput、AVFoundation、NSDictionary 和 NSObject 页面,但无济于事。
这是我尝试过的所有内容(可能想出/遇到):(评论是编译器错误)
videoDataOutput = AVCaptureVideoDataOutput()
videoDataOutput.videoSettings = NSDictionary(objectsAndKeys: Int(kCVPixelFormatType_32BGRA), (kCVPixelBufferPixelFormatTypeKey))
//Cannot find an initializer for type 'NSDictionary that accepts an argument list of type '(objectsAndKeys: Int, (CFString))'
videoDataOutput.videoSettings = NSDictionary(objects: Int(kCVPixelFormatType_32BGRA), forKeys: (kCVPixelBufferPixelFormatTypeKey))
//Missing argument for parameter 'count' in call
videoDataOutput.videoSettings = NSDictionary(objects: Int(kCVPixelFormatType_32BGRA), forKeys: (kCVPixelBufferPixelFormatTypeKey)) as [AnyObject : AnyObject]
//Type 'AnyObject' does not conform to protocol 'Hashable'
videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey:kCVPixelFormatType_32BGRA]
//'_' is not convertible to 'CFString'
所以我需要知道的是:我做错了什么吗?如果是这样,它是什么,我该如何修复代码?如果不是,我应该在错误报告中包含什么?
@更新
在我无休止的搜索中,我发现了这段 Obj-c 代码(“Stolen” from 1)
dataOutput.videoSettings = [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange] forKey:(NSString *)kCVPixelBufferPixelFormatTypeKey];
现在,鉴于我只有目标 C 的基本概念,我可能误解了代码,但这就是我的代码的结果:
videoDataOutput.videoSettings = NSDictionary(object: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA), forKey: NSString(kCVPixelBufferPixelFormatTypeKey))
问题是,似乎没有接受 CFString 的 NSString 的初始化程序