最近我決定使用SKPSMTPMessage類將圖像傳輸到服務器。SKPSMTPMessage凍結我的程序
我創建了NSOperation類的子類,實現了funktionality並將其添加到NSOperationQueue中,因爲我不希望我的應用被阻止,並且用戶在上載圖像時無法做任何事情。這通常發生在我使用GSM網絡並持續很長時間時,直到圖像被髮送。 (順便說一句,我不想做形象上的任何壓縮)
- (void)main {
SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init];
testMsg.fromEmail = [[_from copy] autorelease];
testMsg.toEmail = [[_to copy] autorelease];
testMsg.relayHost = [[_relayHost copy] autorelease];
testMsg.subject = [[_subject copy] autorelease];
testMsg.delegate = self.delegate;
testMsg.parts = [[_mailParts copy] autorelease];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[testMsg performSelectorOnMainThread:@selector(send) withObject:nil waitUntilDone:NO];}
需要明確的是,我釋放obect在我分配給SKPSMTMessage實例的委託。所以它不會造成任何泄漏。我不得不使用performSelectorOnMainThread:
,否則它不起作用。它就停後
C: Attempting to connect to server at: mail.example.com:25
我發現this張貼在這裏,描述幾乎目前我面臨同樣的問題,但我想不通,它會如何工作的。
他們描述的解決方案是,他們曾經在另一個線程中運行程序。
[NSThread detachNewThreadSelector:@selector(launchJobWithJob:) toTarget:self withObject:jobDescription];
[[NSRunLoop currentRunLoop] run];
但是,當我這樣做不使用的NSOperation子類,它使我這個錯誤:
_NSAutoreleaseNoPool(): Object 0x18a140 of class NSCFString autoreleased with no pool in place - just leaking
,但仍然沒有工作。它再次只打印這個「C:嘗試連接到服務器:mail.example.com:25」。
任何人都可以請幫忙嗎?
編輯
在子類的NSOperation我現在使用的,而不是
[testMsg performSelectorOnMainThread:@selector(send) withObject:nil waitUntilDone:NO];
代碼。
[testMsg send];
[[NSRunLoop currentRunLoop] run];
它幫助我解決凍結問題,但沒有給出消息發送的可靠性。
我實際上遇到了使用SKPSMTPMessage的問題。在發送電子郵件的過程中,如果用戶推到新的控制器,我允許,應用程序崩潰,直到第二個「***停止看門狗***」日誌已經作出....我想在主線程上執行此操作,凍結用戶界面,以便用戶無法在發送郵件時更改視圖....也許這不是最好的主意,但我似乎無法讓崩潰停止... – jsetting32 2013-07-09 16:54:16
嗯。 weired。我可以問你嗎,你是否還將NSOperation中的邏輯打包並添加到新創建的NSOperationQueue中?如果是這樣,操作隊列只存在於推送的視圖控制器中嗎?因爲這可能是問題所在。在操作隊列被釋放之前,操作需要被取消。我建議(我也這樣做),是在UIApplicationDelegate協議的實現中創建一個NSOperationQueue。 viewcontroller只顯示數據並創建一個可發送的對象。這是我的詭計,我希望它也能幫助你! – NicTesla 2013-07-10 07:26:16