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