2014-01-08 41 views
2

我正在开发iPhone应用程序。我正尝试通过Gmail服务器发送包含smtp的URL。我使用CFNetwork框架。有时,邮件没有问题发送,但很多时候我在该行EXC_BAD_ACCESS得到一个异常EXC_BAD_ACCESS如果exc_bad_access同时向cfnetwork写入输出流

(CFWriteStreamCanAcceptBytes(outputStream)) 

1类:HSK_CFUtilities

CFIndex CFWriteStreamWriteFully(CFWriteStreamRef outputStream, const uint8_t* buffer, CFIndex length) 
{ 
    CFIndex bufferOffset = 0; 
    CFIndex bytesWritten; 

    while (bufferOffset < length) 
    { 
     if (CFWriteStreamCanAcceptBytes(outputStream)) 
     { 
      bytesWritten = CFWriteStreamWrite(outputStream, &(buffer[bufferOffset]), length - bufferOffset); 
      if (bytesWritten < 0) 
      { 
       // Bail!     
       return bytesWritten; 
      } 
      bufferOffset += bytesWritten; 
     } 
     else if (CFWriteStreamGetStatus(outputStream) == kCFStreamStatusError) 
     { 
      return -1; 
     } 
     else 
     { 
      // Pump the runloop 
      CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.0, true); 
     } 
    } 

    return bufferOffset; 
} 

2类:SKPSMTPMessage的方法parseBuffer

case kSKPSMTPWaitingSendSuccess: 
       { 
        if ([tmpLine hasPrefix:@"250 "]) 
        { 
         sendState = kSKPSMTPWaitingQuitReply; 

         NSString *quitString = @"QUIT\r\n"; 
         DEBUGLOG(@"C: %@", quitString); 
         if (CFWriteStreamWriteFully((CFWriteStreamRef)outputStream, (const uint8_t *)[quitString UTF8String], [quitString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]) < 0) 
         { 
          error = [outputStream streamError]; 
          encounteredError = YES; 
         } 
         else 
         { 
          [self startShortWatchdog]; 
         } 
        } 

我想知道你能不能给我一个提示?我将不胜感激任何帮助 。谢谢你,最好的问候。

+0

你设法解决?我有同样的问题。 – Kalaichelvan

+0

@Kalaichelvan:是的,我管理,请检查我的答案这个问题,希望它可以帮助你。 :) – Nico

回答

4

因为它是EXC_BAD_ACCESS错误,以便

在我来说,当我需要的.h类&使用

SKPSMTPMessage对象作为全球对需要类由SKPSMTPMessagestrongproperty,它的工作。

enter image description here

这里是什么原因导致EXC_BAD_ACCESS以及如何追踪问题的根源有很大的联系:

Lou Franco's Understanding EXC_BAD_ACCESS