如何处理返回NSError的PyObjC方法?

2024-09-29 17:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让我的PyObjC应用程序在用户单击按钮时录制音频。我试图使用AVAuidioRecorder类。我的代码是:

@IBAction
def startRecording_(self, sender):

    audioPath = '~/Desktop/recordTest.mp3'
    audioPathStr = NSString.stringByExpandingTildeInPath(audioPath)
    audioURL = NSURL.fileURLWithPath_(audioPathStr)

    audioSettings = {'AVFormatIDKey': 'kAudioFormatAppleIMA4', 'AVSampleRateKey': 1600.0, 'AVNumberOfChannelsKey': 1 }
    audioDict = NSDictionary.dictionaryWithDictionary_(audioSettings)

    (recorder, error) = AVAudioRecorder.alloc().initWithURL_settings_error_(audioURL, audioDict, objc.nil)
    recorder.record()

运行上述代码时,出现以下错误:

^{pr2}$

似乎initWithURL_settings_error_方法需要一个iterable对象作为其第三个参数。但是,我认为当我使用一个调用错误参数的PyObjC方法时,我可以将objc.nil或{}传递给该参数。在

当我对NSString方法使用类似语法时:

(names, error) = NSString.stringWithContentsOfFile_encoding_error_(u"/usr/share/dict/propernames", NSASCIIStringEncoding, objc.nil)

代码运行。在

为什么我对AVAudioRecord方法的调用不起作用?是因为方法调用的是outError,而NSString方法调用的是错误?在


Tags: 方法代码参数错误pyobjcerrorrecordernil
1条回答
网友
1楼 · 发布于 2024-09-29 17:18:33

代码不能用于此AVFoundation类,因为PyObjC没有该框架的元数据描述。因此,它知道最后一个参数是什么类型的参数,它只知道它是指向对象的指针,但不知道它被用作传递引用输出参数。在

要手动检查PyObjC对这个参数的了解:

>> import AVFoundation
>>> AVFoundation.AVAudioRecorder.initWithURL_settings_error_.__metadata__( ['arguments'][-1]
{'null_accepted': True, 'already_retained': False, 'type': '^@', 'already_cfretained': False}

这里的类型应该是“o^@”。在

这是苹果的PyObjC版本:您可以在该版本中使用“importavfoundation”,它将使用AVFoundation框架内的BridgeSupport数据文件。遗憾的是,数据是不完整的,并且没有关于这个方法的信息,这就是为什么这里的类型是错误的。在

通过使用PyObjCs元数据API可以很容易地解决此问题:

^{pr2}$

修复所有AVFoundation的元数据需要更多的工作:-(

相关问题 更多 >

    热门问题