@Update 2:我能够使用Swift Dictionary
文字修复它。
videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA)]
首先,快速免责声明:这是我对代码的第一次真实体验(所以我很抱歉,如果这个问题特别愚蠢!),我正在运行Xcode 7,这是测试版,所以我我想说明这可能是当前构建中的一个错误(7.0 beta 3(7A152u))。然而,我是无能为力的 - 我不确定这是我的错还是Xcode的。 (这就是为什么我要求而不是提交错误报告 - 我不是那个自信)
话虽这么说,我似乎无法为我的AVCaptureVideoDataOutput变量定义videoSettings,就像我在Xcode 6上所做的那样。我尝试了很多不同的方式,其中大部分是我从之前的Stack Overflow中获得的问题,但没有问题。该应用程序不是基于Xcode 7构建的,但是在Xcode 6上编译的iOS 8上运行的代码也在更新后的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'
所以我需要知道的是:我做错了什么?如果是这样,它是什么,以及如何修复代码?如果没有,我应该在错误报告中包含哪些内容?
@Update
在我无休止的搜索过程中,我偶然发现了这段Obj-c代码(“{3}}中的”被盗“)
dataOutput.videoSettings = [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange] forKey:(NSString *)kCVPixelBufferPixelFormatTypeKey];
现在,鉴于我只有目标C的基本概念,我可能会误解代码,但这就是我的代码的结果:
videoDataOutput.videoSettings = NSDictionary(object: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA), forKey: NSString(kCVPixelBufferPixelFormatTypeKey))
事实上,似乎没有NSString的初始化程序接受CFString
答案 0 :(得分:2)
工作回答在这里,
videoOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey : Int(kCVPixelFormatType_32BGRA)]
检查@Leo给出的答案 https://stackoverflow.com/a/29786129/1630208
答案 1 :(得分:1)
您不能将Int放入NSDictionary中。
使用多个对象和键在Swift中创建NSDictionary:
NSDictionary(objectsAndKeys: [obj1, key1, obj2, key2])
一个对象和密钥
NSDictionary(object, forKey: key)
答案 2 :(得分:1)
现在应该是:
videoDataOutput.videoSettings = NSDictionary(object: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA), forKey: NSString(string: kCVPixelBufferPixelFormatTypeKey)) as [NSObject : AnyObject]
答案 3 :(得分:0)
在 Swift 5 和 Xcode 12 中,只有以下内容有效:
videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32BGRA)]