0

いくつかのビューとカスタムのビュー コントローラーがありますuiview。指で画面に触れると、カスタム uiview のおかげで線が引けます。

そのために、通知センターを介してカスタムlocation.xに送信しますlocation.yuiview

CGPoint location = [touch locationInView:self.view];
userInfo = [NSMutableDictionary dictionary];
[userInfo setObject:[NSNumber numberWithFloat:location.x] forKey:@"x"];
[userInfo setObject:[NSNumber numberWithFloat:location.y] forKey:@"y"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"addLine" object:self userInfo:userInfo];

そして、私のカスタム uiview では、次のようにすべてを受け取ります。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addLine:) name:@"addLine" object:nil];
NSDictionary* userInfo = notification.userInfo;
float x = [[userInfo objectForKey:@"x"] floatValue];
float y = [[userInfo objectForKey:@"y"] floatValue];
p = CGPointMake(x,y);

そしてそれはうまくいきます!!! でも初めて!!!

問題は 、カスタム uiview が初期化されているメインのビューコントローラーを閉じて戻ってきた場合 (たとえば、もう一度再生するため)、このエラーが表示されることです。

[__NSCFType addLine:]: 認識されないセレクターがインスタンス 0x1454dec0 に送信されました *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[__NSCFType addLine:]: 認識されないセレクターがインスタンス 0x1454dec0 に送信されました'

オブザーバーが解除された後、再び機能しないようです...助けてもらえますか?

ありがとう

4

3 に答える 3

0

オブジェクト内の通知後メソッドでは、self を渡していますが、オブザーバーを追加している間、そのオブジェクト内では nil を渡しています。そのため、以下のメソッドをそのように変更しました:-

    [[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(addLine:) name:@"addLine" object:self];
于 2013-10-25T10:22:26.390 に答える