2012-07-16 109 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類來處理這個問題,並將流代理整合在一起。

快樂編碼!