为什么我无法将viewcontroller推送到下一个viewcontroller?

时间:2011-04-20 05:42:43

标签: iphone objective-c sockets function pushviewcontroller

我正在使用objective-c中的套接字,所以我编写了一个函数来获取服务器的响应,当我的条件成立时我想推送到下一个视图控制器但是它没有推送或提供plz帮助 这里给出了一些代码

这是我的功能

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];
}

提前完成

2 个答案:

答案 0 :(得分:1)

之前我做过非常相似的事情。你确定它甚至可以到达[lvc goToWatchList];  在receiveData内?还要检查你从套接字读取是不是阻塞了线程!

同时检查你的xib文件 - 如果找不到它也不会出现......(Ups - 在我输入时已经提到过了......)

答案 1 :(得分:0)

确保在主线程上发生这种情况。还要确保在init消息之后wlController不是nil,以防无法找到nib或者它有问题。

您可以在此处创建一个新的LoginViewController:

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

但是我没有看到你将它添加到视图中的位置。您将WatchListViewController推送到它,但它不能出现,因为它的父(LoginViewController)没有显示。是的,将调用LoginViewController上的loadview - (void)loadView,因为你正在向它添加一些内容(WatchViewController),但由于该视图没有显示,所以它不需要加载LoginViewController的视图。

尝试将此代码添加到receiveData的末尾:

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

如果这不起作用,请尝试更改为goToWatchListFunction以在[[UIApplication sharedApplication] keyWindow]上显示模态视图控制器。