我用它作为观察者:
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];实际上并不是一个被检测到的循环,它将视图视为空闲并自动解除分配,所以我只是制作了一个小循环,每秒运行一个循环,导致一个空方法。修正了它。
答案 0 :(得分:1)
它告诉你确切的错误是什么:'NSInvalidArgumentException', reason: '-[CALayerArray newConnection:]: unrecognized selector sent to instance 0x76aed70'
。
您需要问的问题是“为什么对象位于0x76aed70
一个CALayerArray
?”
首先介绍基础知识。在addObserver:…
设置断点,确保self
符合您的想法。然后设置一个跟踪指针,以便调试器在值改变时中断。你应该能够快速跟踪它。
我的猜测是你的对象已被释放,你没有删除观察者。
答案 1 :(得分:0)
问题是:由于电弧系统,视图被解除分配 [fileHandle acceptConnectionInBackgroundAndNotify];实际上并不是一个被检测到的循环,它将视图视为空闲并自动解除分配,所以我只是制作了一个小循环,每秒运行一个循环,导致一个空方法。修正了它。