2015-06-18 6 views
1

У меня есть эта функция:`NSDictionary` не неявно конвертируется в` [NSObject: AnyObject] `

func audioRecordingSettings() -> NSDictionary { 

     return [ 
      AVFormatIDKey : kAudioFormatMPEG4AAC as NSNumber, 
      AVSampleRateKey : 16000.0 as NSNumber, 
      AVNumberOfChannelsKey : 1 as NSNumber, 
      AVEncoderAudioQualityKey : AVAudioQuality.Medium.rawValue as NSNumber 
     ] 
    } 

Тогда я определил другую:

func startRecordingAudio() { 

    var error: NSError? 

    let audioRecordingURL = self.audioRecordingPath() 

    audioRecorder = AVAudioRecorder(URL: audioRecordingURL, settings: audioRecordingSettings(), error: &error) 
    //Here the error comes. 
} 

Он просит меня, чтобы добавить [NSObject: AnyObject] после audioRecordingSetthings(), я не думаю, что это правильное решение. Потому что, когда я позвонил startRecordingAudio() в другой class, он сработал с Unexpectedly found nil.

+0

'kAudioFormatMPEG4AAC, как NSNumber' должен быть' NSNumber (Целочисленный Беззнаковый: kAudioFormatMPEG4AAC) ' , потому что в основном примитив не может быть представлен как объект напрямую. – holex

ответ

3

Вам просто нужно добавить audioRecordingSettings() as [NSObject : AnyObject] в AVAudioRecorderDelegate:

AVAudioRecorder(URL: audioRecordingURL, settings: audioRecordingSettings() as [NSObject : AnyObject], error: &error) 

Кроме того, я изменил бы свой метод:

func audioRecordingSettings() -> [NSObject : AnyObject] { 

    return [ 
     AVFormatIDKey : kAudioFormatMPEG4AAC, 
     AVSampleRateKey : 16000.0, 
     AVNumberOfChannelsKey : 1, 
     AVEncoderAudioQualityKey : AVAudioQuality.Medium.rawValue 
    ] 
} 
0

Вы должны проверить "AVAudioRecorder" инициализатор, который указывает:

init!(URL url: NSURL!, settings: [NSObject : AnyObject]!, error outError: NSErrorPointer) 

Итак, вам нужно преобразовать настройки в [NSObject : AnyObject].

Смежные вопросы