这是Apple的代码
- (BOOL)removeConnection: (MIDINetworkConnection *)connection;
in
-[MIDINetworkSession removeConnection:]
但它会产生EXC_BAD_ACCESS
。这只发生在iOS 9中。
任何帮助或解决方法?
答案 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];
}
}
这似乎是一种快速的方法来弄清楚如何存储对每个连接的引用,无论是谁发起它。然后当连接被移除时(由您的应用程序或其他设备删除),引用已经存储,并且没有崩溃!