- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
输入和输出流始终打开,并且使用正确的 NSStreamEvent 代码 (NSStreamEventOpenCompleted) 调用相应的委托(delegate)方法。但是,在某些 openSession 尝试中,流已成功打开,但它们不起作用。有时我只能写入输出流,但无法从输入流中读取。有时我不能读或写。
有没有人遇到过这个问题或者知道为什么会这样?任何帮助表示赞赏。谢谢。
这里是一些相关的代码
- (BOOL)openSession
{
_session = [[EASession alloc] initWithAccessory:_selectedAccessory
forProtocol:_protocolString];
if (!_session)
return false;
[_selectedAccessory setDelegate:self];
[[_session inputStream] setDelegate:self];
[[_session outputStream] setDelegate:self];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
[[_session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[[_session inputStream] open];
[[_session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[[_session outputStream] open];
[[NSRunLoop currentRunLoop] run];
});
return true;
}
- (void)setupControllerForAccessory:(EAAccessory *)accessory withProtocolString:(NSString *)protocolString
{
_selectedAccessory = accessory;
_protocolString = [protocolString copy];
}
/**
* There is something weird happening here too, this always get called twice when an accessory
* gets connected. Once without a protocol string and once with a protocol string. I just
* ignore the one without a protocol string.
*/
- (void)accessoryConnected:(NSNotification *)notification
{
EAAccessory *connectedEA = [notification.userInfo objectForKey:@"EAAccessoryKey"];
// Check to see if the connected EA has a protocol string
if ([[connectedEA protocolStrings] count] == 0)
return;
[self setupControllerForAccessory:connectedEA
withProtocolString:[[connectedEA protocolStrings] objectAtIndex:0]];
[self openSession];
}
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
case NSStreamEventOpenCompleted:
// This case always gets called twice, once for input and once for output
NSLog(@"stream %@ opened", aStream);
break;
case NSStreamEventHasBytesAvailable:
break;
case NSStreamEventHasSpaceAvailable:
break;
case NSStreamEventErrorOccurred:
break;
case NSStreamEventEndEncountered:
[self closeSession];
break;
default:
break;
}
}
- (void)closeSession
{
[[_session inputStream] close];
[[_session inputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session inputStream] setDelegate:nil];
[[_session outputStream] close];
[[_session outputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[_session outputStream] setDelegate:nil];
_session = nil;
_selectedAccessory = nil;
_protocolString = nil;
}
最佳答案
我无法对您的问题添加评论(分数较少!),但我有一些提示,因为我的团队也面临着同样的问题,即使用流时断时续。我们已经向网络团队提出了一个错误。如果可能尝试记录错误,您很可能会在调试器控制台中收到错误“流意外结束”。这可能会出现也可能不会出现。
这是苹果文档中提供的类似代码,它也有同样的问题。 https://developer.apple.com/library/ios/samplecode/SimpleURLConnections/Listings/PostController_m.html#//apple_ref/doc/uid/DTS40009245-PostController_m-DontLinkElementID_12
关于ios - 外部附件流在 100% 的时间都不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178937/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!