这是苹果的代码

- (BOOL)removeConnection: (MIDINetworkConnection *)connection;




-[MIDINetworkSession removeConnection:]


但它会导致EXC_BAD_ACCESS。这仅在iOS 9中发生。

有任何帮助或解决方法吗?

最佳答案

Yar的回答对我有所帮助,但它没有涵盖与其他设备断开连接的情况。而不是将对象存储到removeConnection中的数组中:我有一个管理器对象,该对象侦听MIDINetworkNotificationSessionDidChange通知,查找任何新连接,并将引用添加到NSMutableSet。

因此,在我的经理初始化中,我有:

self.connRefs = [NSMutableSet set];

[[NSNotificationCenter defaultCenter] addObserver:self
     selector:@selector(sessionChanged:)
     name:MIDINetworkNotificationSessionDidChange object:nil];
[self sessionChanged:nil];


...和我的sessionChanged:方法:

- (void)sessionChanged:(NSNotification *)n {
  // ios9 bug hack to keep ref to prevent bad_exec
  for (MIDINetworkConnection *c in [MIDINetworkSession defaultSession].connections) {
    [self.connRefs addObject:c];
  }
}


这似乎是找出如何存储对每个连接的引用的快速方法,无论是谁发起的。然后,当连接被删除(通过您的应用程序或其他设备)时,引用已存储,并且不会崩溃!

10-07 12:29