0

サブクラス化について質問です。

最初のビューから始めます: .h ファイルで:

@interface viewAController : UIViewController 

私の.mファイルで:

-(void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Begin view"); 
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    NSError *error = nil;

if (![udpSocket bindToPort:12345 error:&error]) //check ff of dit werkt!
{
    NSLog(@"F you");
    return;
}

NSLog(@"Derde line"); 
if (![udpSocket beginReceiving:&error])
{
    NSLog(@"Screw you!");
    return;
}   
}

移植と受信開始はうまくいきます。そして、viewAController をサブクラス化すると、次のようになります。

@interface viewBController : viewAController

私の.mファイルで:

-(void)viewDidLoad{
[super viewDidLoad]; 
} 

スーパーviewDidLoadを呼び出しているため、サブクラス[viewBController]がすべてのNSLogを表示することを期待しています。

代わりに、F you! と言っています。ポートに一度しかバインドできないことは理解していますが、エラーメッセージが表示されることを期待していますが、これは表示されません。

したがって、バインドを削除すると、Screw you が表示されます。ポートにバインドしていない場合、受信開始とは言えないようです。これらの 2 つの方法がなくても問題なく動作しますが、親からすべてを出力しています。

質問: バインドする必要がありますか? 実際にはポート 12345 をリッスンするだけでよいのですが、これを別の方法で実装する必要がありますか?

bind や beginreceive を使用せずに作業する必要がありますか? すべてのポートをリッスンしないように、バインディングを好むと思います。

バインドしていないのに受信を開始できないのはなぜですか?

エラーを表示するにはどうすればよいですか?? エラーが出力されていない原因...

挨拶

4

2 に答える 2

0

あなたがしていることは正しいですが、派生したViewControllerのオブジェクトをいくつかのビューに追加したかどうかを尋ねる質問は1つだけです。追加しない限り、スーパークラスのdidLoadが起動されません。派生ビューのオブジェクトをSomeViewに追加して確認します。

于 2012-05-14T12:47:38.457 に答える
0

これはあなたがしていることは間違っています

NSLog("@Hi there!");

使用する必要があります

NSLog(@"Hi there!"); 

そして、これがタイプミスである場合(そうであることを願っています)、サブビューを追加するかプッシュする場所にサブクラスを追加する必要があります。

于 2012-05-14T13:01:02.360 に答える