Ios 无法创建NSDictionary来定义AVCaptureVideoDataOutput视频设置

Ios 无法创建NSDictionary来定义AVCaptureVideoDataOutput视频设置,ios,swift,xcode7,xcode7-beta3,Ios,Swift,Xcode7,Xcode7 Beta3,@更新2:我能够使用Swift字典来修复它 videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA)] 首先,快速免责声明:这是我对代码的第一次真实体验(如果这个问题特别愚蠢,我很抱歉!),我正在运行Xcode 7,它是beta版,所以我想澄清一下,这可能是当前版本中的一个bug(7.0 beta

@更新2:我能够使用Swift
字典来修复它

videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA)]

首先,快速免责声明:这是我对代码的第一次真实体验(如果这个问题特别愚蠢,我很抱歉!),我正在运行Xcode 7,它是beta版,所以我想澄清一下,这可能是当前版本中的一个bug(7.0 beta 3(7A152u))。然而,我不知道——我不确定这是我的错还是Xcode的错。(这就是为什么我要求而不是提交错误报告-我没有那么自信)

话虽如此,我似乎无法像在Xcode 6上那样为AVCaptureVideoDataOutput变量定义视频设置。我已经尝试了很多不同的方法,其中大部分都是从前面的堆栈溢出问题中得到的,但没有一种有效。该应用程序不在Xcode 7上构建,但在iOS 8上运行的代码(在Xcode 6上编译)在更新后也在iOS 9上运行,没有任何问题

我查阅了苹果的文档,似乎没有任何变化,我也找不到任何有用的代码。我已经检查了AVCaptureVideoDataOutput、AVFoundation、NSDictionary和NSObject页面,但没有结果

以下是我尝试过的所有内容(可能想到/遇到):(注释是编译器错误)

所以我需要知道的是:我做错什么了吗?如果是,是什么,我如何修复代码?如果没有,我应该在bug报告中包括什么


@更新

在我没完没了的搜索过程中,我偶然发现了这段Obj-c代码(“偷来的”)

现在,考虑到我对objective C只有一个基本概念,我可能误解了代码,但我的代码就是这样产生的:

videoDataOutput.videoSettings = NSDictionary(object: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA), forKey: NSString(kCVPixelBufferPixelFormatTypeKey))

问题是,似乎没有一个接受CFString的NSString初始值设定项,您不能将Int放入NSDictionary

要使用多个对象和键在Swift中创建NSDictionary,请执行以下操作:

NSDictionary(objectsAndKeys: [obj1, key1, obj2, key2])
一个对象和一把钥匙

NSDictionary(object, forKey: key)
现在应该是:

videoDataOutput.videoSettings = NSDictionary(object: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA), forKey: NSString(string: kCVPixelBufferPixelFormatTypeKey)) as [NSObject : AnyObject]

工作答案在这里

videoOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey : Int(kCVPixelFormatType_32BGRA)]
检查@Leo在中给出的答案

在Swift 5和Xcode 12中,只有以下功能可用:

videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32BGRA)]

那么,我应该如何添加像素格式类型?在这四种情况下,它都不能作为OSType工作(不转换为Int)。(这段代码在Xcode6上工作)没有,还是没有。我尝试了两件事:
videoDataOutput.videoSettings=(NSDictionary(对象:NSNumber(kCVPixelFormatType_32BGRA),forKeys:kCVPixelBufferPixelFormatTypeKey))
,下一个逻辑步骤是使用NSNumber的最后一个工作行,但它会给我两个错误。原来我需要将
kCVPixelFormatType_32BGRA
标记为无符号整数。Xcode还建议将
添加为![NSObject:AnyObject]
向下转换(由于NSDictionary无法转换为[NSObject:AnyObject]),但添加代码会导致另一个错误抱歉,我添加了双重注释,但我打破了字符限制。更具体地说,Xcode现在“无法将“[NSObject:AnyObject]”类型的值分配给“[NSObject:AnyObject]!”类型的值”;在NSDictionary中添加感叹号会导致“调用中参数'count'缺少参数”错误。Xcode建议后的行是
videoDataOutput.videoSettings=(NSDictionary(objects:NSNumber(unsignedInt:kCVPixelFormatType_32BGRA),forKeys:kcvpixelbufferpixelformatypekey))as![NSObject:AnyObject]
我也有同样的问题。我想这是因为Xcode 7的测试版。@osuka_uu你有什么解决方案吗?下面是我正在尝试的代码,我得到的错误是“找不到接受类型为“(unsignedInt:Int)”的参数列表的类型“NSNumber”的初始值设定项”
let key=kcvpixelbufferpixelformatypekey as NSString let value=NSNumber(unsignedInt:kCVPixelFormatType_32BGRA)let videoSettings=NSDictionary(objects:value,forKeys:key)videoFileOutput?.videoSettings=videoSettings
videoOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey : Int(kCVPixelFormatType_32BGRA)]
videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32BGRA)]