Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何初始化另一个视图控制器的值_Ios_Iphone_Ios7 - Fatal编程技术网

Ios 如何初始化另一个视图控制器的值

Ios 如何初始化另一个视图控制器的值,ios,iphone,ios7,Ios,Iphone,Ios7,在我的应用程序中,当用户从浏览器重定向到应用程序时,我将显示注册页面。我想从url变量中插入值。所以首先我从url中获取值,然后用文本框值显示该页面,但它并没有设置文本框值 我的代码: - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSS

在我的应用程序中,当用户从浏览器重定向到应用程序时,我将显示注册页面。我想从url变量中插入值。所以首先我从url中获取值,然后用文本框值显示该页面,但它并没有设置文本框值

我的代码:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSString *urlString=[NSString stringWithContentsOfURL:url encoding:nil error:nil];
 NSRange r = [urlString rangeOfString:@"gratzeez://" options:NSCaseInsensitiveSearch];

    if(r.location != NSNotFound){
        NSLog(@"founddddd");
        NSLog(@"gratzeez url %@",url);
        //NSString *str=[url valueForKey:@"email"];
        NSArray *query = [[url query] componentsSeparatedByString:@"&"];
        NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithCapacity:[query count]];
        for(NSString *parameter in query)
        {
            NSArray *kv = [parameter componentsSeparatedByString:@"="];
            [parameters setObject:[kv count] > 1 ? [[kv objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding] : [NSNull null]
                           forKey:[[kv objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]];
        }

        NSLog(@"Parameters: %@", parameters);


        [self.tabBar dismissViewControllerAnimated:NO completion:nil];
        RegistrationViewController *RegistrationVC=[[RegistrationViewController alloc] initWithNibName:@"RegistrationViewController" bundle:nil];
        RegistrationVC.txtEmail.userInteractionEnabled=NO;
        NSLog(@"q = %@", [parameters objectForKey:@"email"]);

        UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:RegistrationVC];
        RegistrationVC.txtEmail.text=[parameters objectForKey:@"email"];
        NSLog(@"value%@",RegistrationVC.txtEmail.text); //here getting null value
        [self.tabBar presentViewController:navController animated:NO completion:nil];
        navController.navigationItem.leftBarButtonItem=nil;
        return YES;

    }
我用这种方式显示注册视图控制器是什么

RegistrationViewController *RegistrationVC=[[RegistrationViewController alloc] init ];

    NSLog(@"q = %@", [parameters objectForKey:@"email"]);
    UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:RegistrationVC];

    NSLog(@"txtemail %@ value%@",RegistrationVC.txtEmail,RegistrationVC.txtEmail.text);
    [self.tabBar presentViewController:navController animated:NO completion:^{
        RegistrationVC.txtEmail.userInteractionEnabled=NO;
        RegistrationVC.txtEmail.text=[parameters objectForKey:@"email"];
    }];

现在,这两个值都为null。

正如我们在注释中看到的,当您尝试为txtEmail赋值时,它不会被创建

我建议您在方法
presentViewController:animated:completion:
中添加一个完成块。此时,将加载控制器
RegistrationVC
,并创建其视图(和子视图),因此您可以为元素指定值:

[self.tabBar presentViewController:navController animated:NO completion:^{
    RegistrationVC.txtEmail.text=[parameters objectForKey:@"email"];
}];

替换
NSLog(@“value%@”,RegistrationVC.txtEmail.text)带有
NSLog(@“textmail:%@\nvalue%@”、RegistrationVC.txtEmail、RegistrationVC.txtEmail.text)
检查您的textEmail此时是否存在。我看到您使用initWithNibName:bundle,在这种情况下,您的txtEmail必须放在您的Nib文件中,并附加IBOutlet。我希望你的[电子邮件]!=nil@zbMaxtxtEmail当时不存在。现在该怎么办?@zbMax这可能是因为在注册中导入appdelegate,并注册到appdelegate viewcontroller??很好…工作了…我以前做过这件事,当时它工作得很好…但不知道我已经对此进行了更改,它不工作了…无论如何,谢谢你…如果您只需使用
[[RegistrationViewController alloc]init]
实例化您的
RegistrationViewController
,即可创建一个具有空视图的控制器。不会创建界面生成器上的每个元素。并且所有IBOutlet都将为空。您可以将
[[Myclass alloc]initWithNibName:@“myNib”]
作为
Xcode查看。为我创建一个“Myclass”类型的对象,其视图将是名为“myNib”的xib
,并将属性与您链接到的接口上的元素相关联。在完成块中记录TXTMail,而不是在
presentViewController:animated:completion:
是的,我已经设置了…我在日志中变为空..而且当我使用navigationcontroller演示时,注册视图页面也没有设置任何内容。如果您的文本电子邮件位于界面生成器上,链接到.h,并且如果您使用
创建
RegistrationVC
[[RegistrationViewController alloc]initWithNibName:@“RegistrationViewController”bundle:nil]
,文本电子邮件在显示视图控制器后不应为空…强制加载视图可能会奏效…尝试在
RegistrationViewController*RegistrationVC之后添加
[RegistrationVC view]
=[[RegistrationViewController alloc]initWithNibName:@“RegistrationViewController”捆绑包:nil];