0

問題が発生しています。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;
}
4

1 に答える 1

0

以下は、iOS では使用できません。

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

iPhone用のiOSでどのように機能するかは本当にわかりません。

あなたのオプションはかなり簡単です...

A) Apple からのこのテクニカル ノートで説明されているように、NSStream でカテゴリを作成します

B) CFStreamCreatePairWithSocketToHost() を使用し、単純に CFReadStreamRef/CFWriteStreamRef をブリッジします。

(B) をお勧めします。これは、柔軟性を高めるための最良のオプションを提供するためです。より具体的には、独自の StreamObject クラスを作成して、これとストリーム デリゲートをすべて 1 つに処理できます。

ハッピーコーディング!

于 2013-03-02T18:02:04.393 に答える