これをオブザーバーとして使用しています:
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]; 検出されたループは実際にはビューをアイドル状態として処理し、自動的に割り当てを解除したので、空のメソッドにつながるループを毎秒実行する小さなタイマーを作成しました。それを修正しました。