2013-05-06 68 views
1

在我的iPhone應用程序中,我使用SMTP發送郵件。但有時郵件發送後,應用程序突然出現以下錯誤信息使用SMTP發送郵件後,應用程序崩潰

<Warning>: Application 'UIKitApplication:com.myid.smtpsample[0x2630]' exited abnormally with signal 11: Segmentation fault: 11 
��May 6 17:07:21 Device-3 ReportCrash[13041] <Error>: libMobileGestalt copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionary 

崩潰這是我的代碼:

-(void) sendEmail 
{ 
    NSData *imagedata=UIImageJPEGRepresentation(image, 0.2f); 

    SKPSMTPMessage *Message = [[SKPSMTPMessage alloc] init]; 
    Message.fromEmail = @"my email"; 
    Message.toEmail = receiverEmailString; 
    Message.relayHost = @"smtp.gmail.com"; 
    Message.requiresAuth = YES; 
    Message.login = @"my email"; 
    Message.pass = @"my password"; 
    Message.subject = @"Details"; 
    Message.wantsSecure = YES; 
    Message.delegate = self; 

    NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey,@"Message Body",kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil]; 

    NSDictionary *vcfPart= [NSDictionary dictionaryWithObjectsAndKeys:@"image/jpeg;\r\n\tx-unix-mode=0644;\r\n\tname=\"MyPhoto.jpg\"",kSKPSMTPPartContentTypeKey, 
          @"attachment;\r\n\tfilename=\"MyPhoto.jpg\"",kSKPSMTPPartContentDispositionKey,[imagedata encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil]; 

    Message.parts = [NSArray arrayWithObjects:plainPart,vcfPart,nil]; 
    [Message send]; 

} 


- (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{ 

    NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]); 
} 

- (void)messageSent:(SKPSMTPMessage *)message{ 

    NSLog(@"delegate - message sent"); 


} 

請告訴我,我做錯了

回答

0

你在方法中創建消息,將其作爲委託給它自己(意味着它在完成時會發送消息),但在發送消息之後,當離開方法時由ARC發佈消息。因此,創建一個消息ivar,並且在它告訴你它成功或失敗之後(並且在調度到主線程的塊中這樣做,在委託回調中直接刪除或釋放對象是有風險的),它只會是零。 PS:同樣,對於類對象,請使用小寫字母和大寫第一個字母。

+0

由於您沒有給出示例代碼,因此我必須爲代碼投票選出相同的解決方案。 – Thiru 2015-06-04 13:00:53

+0

@Thiru,我明白了。它更容易複製和粘貼解決方案,而不必考慮代碼的功能,或者爲什麼。愚蠢的我 - 我只是一個老派的開發者。 – 2015-06-04 13:55:29

4

我知道我有點遲來回答這個問題。但可能會幫助別人。所以在這裏。

我有同樣的問題,這就是我解決它的方法。我唯一需要做的就是給SKPSMTPMessage對象添加一個強引用,並在發送電子郵件時引用它。奇蹟般有效。 (哦,也是我留在機智message = nil;並沒有引起任何問題對我來說)。

 @interface MyViewController()  
    @property (nonatomic, strong) SKPSMTPMessage *Message; 
    @end 

    -(void) sendEmail 
    { 
     _Message = [[SKPSMTPMessage alloc] init]; 
     _Message.fromEmail = @"my email"; 
     _Message.toEmail = receiverEmailString; 
     ... 
     [_Message send]; 

    } 


    - (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{ 
     message = nil; 
     NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]); 
    } 

    - (void)messageSent:(SKPSMTPMessage *)message{  
     message = nil; 
     NSLog(@"delegate - message sent"); 
    } 

希望這有助於。