removeConnection导致EXC_BAD_ACCESS

时间:2015-09-21 01:47:32

标签: ios9 coremidi

这是Apple的代码

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

in

-[MIDINetworkSession removeConnection:]

但它会产生EXC_BAD_ACCESS。这只发生在iOS 9中。

任何帮助或解决方法?

2 个答案:

答案 0 :(得分:3)

MIDINetworkConnection获得dealloced并导致问题。

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

答案 1 :(得分:2)

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

这似乎是一种快速的方法来弄清楚如何存储对每个连接的引用,无论是谁发起它。然后当连接被移除时(由您的应用程序或其他设备删除),引用已经存储,并且没有崩溃!