1

我有一个使用外部访问框架的应用程序。我遵循了 Apple 提供的名为 EADemo 的示例。我正在通过轮询机制写入输出流,它在 iOS 5 之前工作正常。当我使用 iOS 6 进行测试并等待 HasSpaceAvailable 时,它​​总是返回一个 NO。从这里的讨论 http://discussions.apple.com/message/21161460#21161460我尝试将当前运行循环更改为主运行循环,但仍然没有成功。

我发布了一些代码来给出一个想法:

    [[mSession inputStream] setDelegate:self];
    [[mSession inputStream] scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
    [[mSession inputStream] open];

    // get the output stream from session object and schedule it in the run loop
    // to get the events on the stream

    [[mSession outputStream] setDelegate:self];
    [[mSession outputStream] scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
    [[mSession outputStream] open];
    status  = YES;

我在 EADemo 代码中使用的 write 方法。

    while (([[mSession outputStream] hasSpaceAvailable]) && ([mWriteData length] > 0))
    {
        bytesWritten = [[mSession outputStream] write:[mWriteData bytes] maxLength:[mWriteData length]];
        if (bytesWritten == -1)
        {

            break;
        }
        else if (bytesWritten > 0)
        {
            NSString *str = [NSString stringWithFormat:@"Successfully written : %d bytes",bytesWritten];


            [mWriteData replaceBytesInRange:NSMakeRange(0, bytesWritten) withBytes:NULL length:0];
        }

        else if(bytesWritten == 0)
        {
            NSString* streamStatus = [NSString stringWithFormat:@"STREAM CAPACITY REACHED"];

        }

    }

}

else
{

    bytesWritten = -1;

}

我必须支持前台和后台的数据传输。我看到数据传输发生在前台,但在后台失败。我看到该应用程序在 iOS 5 之前运行良好,但是当我尝试在 iOS 6 设备上进行测试时它失败了。有没有人有解决方案?

4

0 回答 0