1

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)

編集

ムービー オブジェクトでインスタンス メソッドを使用できないことがわかりました。

4

2 に答える 2

2

セレクター「initWithAttributes:error:」には、Objective-C の 2 つの引数があり、2 番目の引数は参照渡しの出力パラメーターです。Python には参照渡しの引数がないため、PyObjC は値を 2 番目の戻り値として返します。これが、このセレクターの 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
于 2012-11-20T14:05:35.957 に答える
1

コメントから、QTMovie.alloc().initWithAttributes_error_実際には2要素のタプルが返され、最初の要素として必要なオブジェクトが、2番目の要素に他のオブジェクトが含まれているように見えます(エラーの可能性がありますか?)

次のようにオブジェクトにアクセスできるはずです。

(movie, error) = QTMovie.alloc().initWithAttributes_error_(attribs, objc.nil)
于 2012-08-26T19:49:11.803 に答える