2012-07-16 110 views
0

我遇到问题。在iPhone(iOS 5)和iPhone/iPad模拟器上运行相同的代码。但它不适用于iPad(iOS 5)。我会很感激任何帮助。iPad设备上的CFReadStreamCopyError报告错误

这里读端口代码:

//Code for read port. 
CFIndex bytesRead = CFReadStreamRead(inputStream, bufferPoint, 1024); 
if (bytesRead < 0) { 
    NSLog(@"bytesRead < 0"); 
    CFErrorRef error = CFReadStreamCopyError(inputStream); 
    //reportError(error); 
    DEBUGLOG(@"readResponse error \n") 

以上之前,还有连接部分代码。

//prevent to release before relocate 
if ((inputStream != nil) && (outputStream != nil)) { 
    [inputStream release]; 
    inputStream = nil; 
    [outputStream release]; 
    outputStream = nil; 
} 
[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream]; 
//[self lgetStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream]; 
if ((inputStream != nil) && (outputStream != nil)) 
{ 
    sendState = kIMAPConnecting; 

    isSecure = NO; 

    [inputStream retain]; 
    [outputStream retain]; 

    [inputStream setDelegate:self]; 
    [outputStream setDelegate:self]; 


    result = [inputStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL forKey:NSStreamSocketSecurityLevelKey]; 
    DEBUGLOG(@"inputStream setProperty result: %d", result); 
    result =[ outputStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL forKey:NSStreamSocketSecurityLevelKey]; 
    DEBUGLOG(@"outputStream setProperty result: %d", result); 


    if (!CFReadStreamOpen(inputStream)) { 
     DEBUGLOG(@"inputStream open failed"); 
     return NO; 
    } 

    if (!CFWriteStreamOpen(outputStream)) { 
     DEBUGLOG(@"outputStream open failed"); 
     return NO; 
    } 



    self.inputString = [NSMutableString string];   

    DEBUGLOG(@"SCRIMAPMessage startToConnect end with YES\n"); 
    return YES; 
} 

回答

0

下通过iOS的不适:

[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream]; 

我真的不知道它如何能够在iOS上运行的iPhone。

你的选择是相当简单的...

A)从苹果在技术说明中描述的创建一个NSStream类别:here

B)使用CFStreamCreatePairWithSocketToHost(),并简单地弥合CFReadStreamRef/CFWriteStreamRef

我推荐(B),因为它会给你灵活性的最佳选择。更具体地说,您可以创建自己的StreamObject类来处理这个问题,并将流代理整合在一起。

快乐编码!