我遇到了一个问题。相同的代码在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;
}
答案 0 :(得分:0)
iOS无法使用以下内容:
[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream];
我真的不知道它如何在iOS上为iPhone工作。
您的选择相当简单......
A)在Apple的技术说明中描述的NSStream上创建一个类别:here
B)使用CFStreamCreatePairWithSocketToHost()并简单地桥接CFReadStreamRef / CFWriteStreamRef
我建议(B)因为它会为您提供灵活性的最佳选择。更具体地说,您可以创建自己的StreamObject类来处理它,并将流委托为一个。
快乐的编码!