2012-08-26 10 views
1

setDelegate_을 pyObjC 코드 내에서 호출하면 AttributeError: 'tuple' object has no attribute 'setDelegate_'이 표시됩니다.pyObjC에서 객체의 메소드를 호출 할 수 없습니다

내 코드는 다음과 같습니다

def createMovie(self): 
     attribs = NSMutableDictionary.dictionary() 
     attribs['QTMovieFileNameAttribute'] = '<My Filename>' 
     movie = QTMovie.alloc().initWithAttributes_error_(attribs, objc.nil) 
     movie.setDelegate_(self) 

편집

내가 동영상 개체와 인스턴스 메서드를 사용할 수 없다는 것을 알게되었습니다. 실제로 당신이 첫 번째 요소와 두 번째 요소에서 다른 객체로 사용할 개체와, 2 요소의 튜플을 반환 QTMovie.alloc().initWithAttributes_error_처럼 당신의 코멘트에서

+0

무엇을'QTMovie.alloc() initWithAttributes_error_ (attribs, objc.nil)'반환 오브젝티브 C에서

? 튜플 ('QTMovie','error')? –

+0

실제로 이런 식으로 뭔가를 반환 는'(, 없음)'. – LifeIsHealthy

+0

Objective-C에서 코드 위의 코드가 완벽하게 실행되어야한다고 생각합니다. – LifeIsHealthy

답변

1

, 그것은 보이는 (아마도 오류?)

하는 당신은 할 수 있어야한다 그런 개체를 액세스 할 :

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

와우 감사합니다! 그것은 해결책이었습니다. Objective-C에서 오류는 두 번째 인수로 전달되지만 pyObjC에서는 튜플의 두 번째 요소로 반환됩니다. – LifeIsHealthy

2

선택기 "initWithAttributes 오류 :"오브젝티브 C의 두 인자를 가지며, 두 번째는 패스의 참조에 의한 출력 파라미터이다. 파이썬에는 참조로 전달되는 인수가 없으므로 PyObjC는이 값을 두 번째 반환 값으로 반환하므로이 선택기의 파이썬 래퍼가 튜플을 반환합니다. 이는 참조 전달 인수를 갖는 다른 메소드와 함께 사용되는 일반적인 메커니즘입니다.

QTMovie* movie; 
NSError* error = nil; 

movie = [[QTMovie alloc] initWithAttributes: attribs error:&error] 
if (movie == nil) { 
    // do something with error 
} 

파이썬에서 :.

movie, error = QTMovie.alloc().initWithAttributes_error_(attribs, None) 
if movie is None: 
    # do something with error