我使用它作为观察者:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(newConnection:)
name:NSFileHandleConnectionAcceptedNotification
object:nil];
确实会被调用,但是当应用崩溃时会显示此消息
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayerArray newConnection:]: unrecognized selector sent to instance 0x76aed70'
这是newConnection处理程序,当前为空:
- (void)newConnection:(NSNotification*)notification
{
}
也已在.h文件中正确声明了...
这是调用通知的代码
socketPort = [[NSSocketPort alloc] initWithTCPPort:portNumber];
int fd = [socketPort socket];
fileHandle = [[NSFileHandle alloc] initWithFileDescriptor:fd
closeOnDealloc:YES];
...
[fileHandle acceptConnectionInBackgroundAndNotify];
编辑:
上面的全部内容都在我上的一堂课中。
除newConnection之外的所有内容都在此函数内:
- (id)initWithPortNumber:(int)pn delegate:(id)dl
{
if( self = [super init] ) {
...
}
我在viewController中这样调用该文件:
SimpleHTTPServer *server= [[SimpleHTTPServer alloc]initWithPortNumber:80 delegate:self];
解:
问题是:由于弧系统[fileHandle acceptConnectionInBackgroundAndNotify]而取消了视图的分配;并不是检测到它的一个真正的循环将视图视为空闲并自动取消分配了它,所以我只是使一个小的计时器每秒运行一次循环,从而导致一个空方法。修复它。
最佳答案
它确切地告诉您错误是什么:'NSInvalidArgumentException', reason: '-[CALayerArray newConnection:]: unrecognized selector sent to instance 0x76aed70'
。
您需要问的问题是“为什么0x76aed70
上的对象为什么是CALayerArray
?”。
首先介绍基础知识。在addObserver:…
处设置一个断点,确保self
符合您的想法。然后设置一个跟踪该指针的轨道,以便调试器在其值更改时将中断。您应该能够迅速找到答案。
我的猜测是您的对象已被释放,并且您没有删除观察者。