removeConnection 结果 EXC_BAD_ACCESS

removeConnection results in EXC_BAD_ACCESS

这是苹果的代码

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

-[MIDINetworkSession removeConnection:]

但结果是 EXC_BAD_ACCESS。这只发生在 iOS 9.

任何帮助或解决方法?

MIDINetworkConnection 变得 dealloced 并导致了问题。

我使用的解决方法是在调用 removeConnection: 之前将这些对象添加到 NSMutableArray(我的对象称为 connectionsThatHaveBeenClosed ;))。不幸的是,我必须让这个数组一直增长直到应用程序关闭,这是一个泄漏。

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

所以,在我的 manager init 中我有:

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];
  }
}

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