我有一个使用外部访问框架的应用程序。我遵循了 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 设备上进行测试时它失败了。有没有人有解决方案?