无法创建NSDictionary来定义AVCaptureVideoDataOutput videoSettings

时间:2015-07-11 21:55:01

标签: ios swift xcode7 xcode7-beta3

@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

4 个答案:

答案 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)]