0

私はobjective-cでソケットに取り組んでいるので、条件が満たされたときにサーバーの応答を取得する関数を書きました。次のビューコントローラーにプッシュしたいのですが、プッシュまたは提示されていません。いくつかのコードがここに示されています

これが私の機能です

void receiveData(CFSocketRef s, 
       CFSocketCallBackType type,  
       CFDataRef address, 
       const void *data, 
       void *info)
{
    LoginViewController *lvc = [[LoginViewController alloc] init];

    char *buffer = (char *)CFDataGetBytePtr((CFDataRef)data);

    if (strstr(buffer, "LCNF|ACPT") == NULL)
    { 
        NSLog(@"%@",data);
        [lvc alert];
    }
    else

        [lvc goToWatchList];
}

私の「goToWatchlist」メソッドは次のとおりです。

-(void)goToWatchList
{

    WatchListViewController *wlController = [[WatchListViewController alloc] initWithNibName:@"WatchListViewController" bundle:nil];
    [self presentModalViewController:wlController animated:YES];
    [wlController release];
}

事前にサンクス

4

2 に答える 2

1

私は以前に非常に似たようなことをしたことがあります。それはあなたの[lvc goToWatchList]; 中にまで届いていますreceiveDataか?また、ソケットからの読み取りがスレッドをブロックしていないことを確認してください!

また、xib ファイルを確認してください。これが見つからない場合は表示されません... (Ups - 入力中に既に言及されています...)

于 2011-04-20T05:55:25.450 に答える
0

これがメインスレッドで発生していることを確認してください。また、nib が見つからない場合や問題がある場合に備えて、init メッセージの後に wlController が nil でないことを確認してください。

ここで新しい LoginViewController を作成します。

LoginViewController *lvc = [[LoginViewController alloc] init];

しかし、それをビューに追加している場所がわかりません。その上に WatchListViewController をプッシュしますが、その親 (LoginViewController) が表示されないため表示されません。はい、LoginViewController -(void)loadView の loadview は、何か (WatchViewController) を追加しているため呼び出されますが、そのビューは表示されていないため、LoginViewController のビューをロードする必要はありません。

次のコードを receiveData の末尾に追加してみてください。

[[[UIApplication sharedApplication] keyWindow] addSubview:lvc.view];

それでもうまくいかない場合は、[[UIApplication sharedApplication] keyWindow] にモーダル ビュー コントローラーを表示するように goToWatchListFunction に変更してみてください。

于 2011-04-20T05:49:47.737 に答える