不能调用在pyObjC对象的方法(Can't call methods on objects

2019-10-17 04:28发布

当我打电话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)

编辑

我发现我不能使用该电影对象的任何实例方法。

Answer 1:

从您的评论,它看起来像QTMovie.alloc().initWithAttributes_error_实际上返回一个两个元素的元组,你想作为第一元素和第二元素的一些其他对象的对象(可能是一个错误?)

您应该能够访问你的对象这样的:

(movie, error) = QTMovie.alloc().initWithAttributes_error_(attribs, objc.nil)


Answer 2:

选择“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


文章来源: Can't call methods on objects in pyObjC