2012-09-05 2 views
0

PyQt4 기반 앱용 API 클라이언트를 작성하려고합니다. - 신호 없음 (processResponse, processError) (나는 self.connect(.., SIGNAL(..), ..)와의 연결을 선언 할 경우에도) 호출되는QNetworkReply segfault가 발생합니다

from PyQt4 import QtCore, QtNetwork 


class API(QtCore.QObject): 
    def processResponse(self, response): 
     print 'response' 
     response.deleteLater() 

    def processError(self, error): 
     print 'error' 

    def authenticate(self, authUrl, login, password): 
     manager = QtNetwork.QNetworkAccessManager() 
     request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl)) 
     reply = manager.get(request) 
     reply.error.connect(self.processError) 
     reply.finished.connect(self.processResponse) 
     return reply 

    def authenticate2(self, authUrl, login, password): 
     manager = QtNetwork.QNetworkAccessManager() 
     request = QtNetwork.QNetworkRequest(QtCore.QUrl(authUrl)) 
     self.reply = manager.get(request) 
     self.reply.error.connect(self.processError) 
     self.reply.finished.connect(self.processResponse) 
     return self.reply 


p = API() 
z = p.authenticate('http://dev.dentv.ru/edda/v1/token/', 'test', 'test') 
print z 
print z.isFinished() 

첫 번째 문제는 : 그리고, 다음 this documentation 나는이 코드를 썼다. 두 번째 문제는 isFinished 메서드를 호출 할 때 마지막 줄에 segfault가 발생한다는 것입니다. API 메서드 내에서이 메서드를 호출하면 제대로 작동합니다.

제가 생각하기에 그 이유는 reply 개체가 가비지 수집되거나 어떻게 든 삭제된다는 것입니다. 따라서 reply 개체 변수에 바인딩하는 authenticate 메서드의 두 번째 버전을 작성했습니다. segfault도 발생합니다.

내 코드의 문제점은 무엇입니까?

답변

1

나는 바보 :(해요

문제는 변수가 아닌 reply을 객체에 manager을 결합함으로써 해결되었습니다. 관리자는 쓰레기.

수집 (같은 떨어지게 이상)했다
관련 문제