iPad设备上的CFReadStreamCopyError报告错误

时间:2012-07-16 16:53:18

标签: iphone objective-c nsstream

我遇到了一个问题。相同的代码在iPhone(iOS 5)和iPhone / iPad模拟器上运行正常。但它不适用于iPad(iOS 5)。我很感激任何帮助。

这是读取端口代码:

//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;
}

1 个答案:

答案 0 :(得分:0)

iOS无法使用以下内容:

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

我真的不知道它如何在iOS上为iPhone工作。

您的选择相当简单......

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

B)使用CFStreamCreatePairWithSocketToHost()并简单地桥接CFReadStreamRef / CFWriteStreamRef

我建议(B)因为它会为您提供灵活性的最佳选择。更具体地说,您可以创建自己的StreamObject类来处理它,并将流委托为一个。

快乐的编码!