3

@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 的初始化程序

4

4 回答 4

2

工作答案在这里,

videoOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey : Int(kCVPixelFormatType_32BGRA)]

在https://stackoverflow.com/a/29786129/1630208查看@Leo 给出的答案

于 2015-12-29T09:54:46.540 回答
1

您不能将 Int 放入 NSDictionary。

要在 Swift 中创建具有多个对象和键的 NSDictionary:

NSDictionary(objectsAndKeys: [obj1, key1, obj2, key2])

一物一键

NSDictionary(object, forKey: key)
于 2015-07-11T22:06:01.737 回答
1

现在应该是:

videoDataOutput.videoSettings = NSDictionary(object: NSNumber(unsignedInt: kCVPixelFormatType_32BGRA), forKey: NSString(string: kCVPixelBufferPixelFormatTypeKey)) as [NSObject : AnyObject]
于 2015-09-29T07:26:10.120 回答
0

在 Swift 5 和 Xcode 12 中,只有以下工作:

videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32BGRA)]
于 2021-02-17T09:45:12.303 回答