当我打电话setDelegate_
我pyObjC代码中,我得到一个AttributeError: 'tuple' object has no attribute 'setDelegate_'
。
我的代码如下所示:
def createMovie(self):
attribs = NSMutableDictionary.dictionary()
attribs['QTMovieFileNameAttribute'] = '<My Filename>'
movie = QTMovie.alloc().initWithAttributes_error_(attribs, objc.nil)
movie.setDelegate_(self)
编辑
我发现我不能使用该电影对象的任何实例方法。
从您的评论,它看起来像QTMovie.alloc().initWithAttributes_error_
实际上返回一个两个元素的元组,你想作为第一元素和第二元素的一些其他对象的对象(可能是一个错误?)
您应该能够访问你的对象这样的:
(movie, error) = QTMovie.alloc().initWithAttributes_error_(attribs, objc.nil)
选择“initWithAttributes:错误:”具有在Objective-C两个参数,其中第二个是一个通按引用输出参数。 Python没有通按引用参数,因此PyObjC返回值作为第二返回值,这就是为什么此选择的Python包装返回的元组。 这是也与具有传递按引用参数等方法使用的通用机制。
在Objective-C:
QTMovie* movie;
NSError* error = nil;
movie = [[QTMovie alloc] initWithAttributes: attribs error:&error]
if (movie == nil) {
// do something with error
}
在Python:
movie, error = QTMovie.alloc().initWithAttributes_error_(attribs, None)
if movie is None:
# do something with error