Невозможно создать NSDictionary для определения AVCaptureVideoDataOutput videoSettings

@ Обновление 2: я смог исправить это с помощью Swift Dictionary буквальный.

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

Во-первых, быстрый отказ от ответственности: это первый реальный опыт, который я испытываю с кодом (поэтому я извиняюсь, если этот вопрос является особенно глупым!), И я использую Xcode 7, который находится в бета-версии, поэтому я хотел бы чтобы понять, что это может быть ошибкой в ​​текущей сборке (7.0 beta 3 (7A152u)). Я, однако, не в курсе - я не знаю наверняка, это моя вина или Xcode. (именно поэтому я спрашиваю, вместо того, чтобы отправлять отчет об ошибках - я не настолько уверен)

При этом я не могу определить видеосеттинг для моей переменной AVCaptureVideoDataOutput, как я это делал в Xcode 6. Я пробовал несколько разных способов, большинство из которых я получил из предыдущих вопросов о переполнении стека, но никто не работает. Приложение не основано на 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 ("Украден" из 1)

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 ответа

Рабочий ответ здесь,

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

Проверьте ответ, предоставленный @Leo на /questions/38255010/preobrazovanie-nsnumber-numberwithunsignedintkcvpixelformattype32bgra-idkcvpixelbufferpixelformattypekey-nil-svift/38255017#38255017

Это должно быть сейчас:

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

Вы не можете поместить Int в NSDictionary.

Чтобы создать NSDictionary в Swift с несколькими объектами и ключами:

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

Один объект и ключ

NSDictionary(object, forKey: key)

В Swift 5 и Xcode 12 работает только следующее:

      videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32BGRA)]
Другие вопросы по тегам