Невозможно создать 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)]