Iphone 如何将UITextField中的值从一个VC传递到另一个VC中的字符串?

Iphone 如何将UITextField中的值从一个VC传递到另一个VC中的字符串?,iphone,ios,cocoa-touch,Iphone,Ios,Cocoa Touch,我在谷歌上搜索过这个,甚至在很多论坛上搜索过,也尝试过Singleton等,但每次我的第二个VC'c字符串都返回空值 RETRIEVALTVC是我的VC,其中我期望值,而IRTViewController是我的VC,它有文本字段 我已经导入了所有的头文件 这是我的检索 检索tvc.h #import<UIKit> NSString *string; @property (nonatomic, copy) NSString *string; #import<UIKit>

我在谷歌上搜索过这个,甚至在很多论坛上搜索过,也尝试过Singleton等,但每次我的第二个VC'c字符串都返回空值

RETRIEVALTVC是我的VC,其中我期望值,而IRTViewController是我的VC,它有文本字段

我已经导入了所有的头文件

这是我的检索

检索tvc.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
这是我的IRTViewController

IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
@property (nonatomic, assign) id target;
-(IBAction)search:(id)sender //Action when Button is Pressed
IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when i used NSLog its returning the value
-(IBAciton)search:(id)sender{
RetrievalTVC *retriv = [[RetrievalTVC alloc]init];
[retrieve getValue:searchTrain.text];
retrieve.string = searchTrain.text;
@synthesize target;

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve =target;
retrieve.string = searchTrain.text;
}

请帮忙。。百万元提前感谢:)

您在检索类中创建了字符串的属性还是分配了它?

您在检索类中创建了字符串的属性还是分配了它?

您的字符串未初始化

在RetrievalTVC.m的init中初始化它。它将解决这个错误

最好把它变成一个财产

编辑:执行此操作。

检索tvc.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
并在现有代码中更新:

- (void)viewDidLoad
{
[super viewDidLoad]; // the list method is not required
}

现在它将工作

您的字符串未初始化

在RetrievalTVC.m的init中初始化它。它将解决这个错误

最好把它变成一个财产

编辑:执行此操作。

检索tvc.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
并在现有代码中更新:

- (void)viewDidLoad
{
[super viewDidLoad]; // the list method is not required
}

现在它可以工作了

您必须在
RetrievalTVC
中创建属性,如:

RetrievalTVC.h

@property (weak, nonatomic) NSString *string;

并在RetrievalTVC.m文件中对其进行合成

您必须在
RetrievalTVC
中创建属性,如:

RetrievalTVC.h

@property (weak, nonatomic) NSString *string;

并在RetrievalTVC.m文件中对其进行合成

我认为您的
检索
的范围可能是错误的

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when I used NSLog its returning the value 
NSLog(@"%@",retriv.string);
如果这是正确的,您应该在使用
retrieve.string


可能这个
检索
不等于
检索

我认为您的
检索
的范围可能是错误的

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when I used NSLog its returning the value 
NSLog(@"%@",retriv.string);
如果这是正确的,您应该在使用
retrieve.string


可能这个
retrieve
不等于
retrieve

我认为您可能在合成变量RetrievalTVC.m类文件时丢失了

将属性更改为:

@property (nonatomic, copy) NSString *string;
致:

如果所有的解决方案都不起作用,那么您为什么不喜欢使用委托变量(即全局变量)来实现呢

看看这个,它会解决你的问题:


我认为您可能在合成变量RetrievalTVC.m类文件时丢失了

将属性更改为:

@property (nonatomic, copy) NSString *string;
致:

如果所有的解决方案都不起作用,那么您为什么不喜欢使用委托变量(即全局变量)来实现呢

看看这个,它会解决你的问题:


您应该这样编写代码

检索tvc.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
@property (nonatomic, assign) id target;
-(IBAction)search:(id)sender //Action when Button is Pressed
IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when i used NSLog its returning the value
-(IBAciton)search:(id)sender{
RetrievalTVC *retriv = [[RetrievalTVC alloc]init];
[retrieve getValue:searchTrain.text];
retrieve.string = searchTrain.text;
@synthesize target;

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve =target;
retrieve.string = searchTrain.text;
}

您应该这样编写代码

检索tvc.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
@property (nonatomic, assign) id target;
-(IBAction)search:(id)sender //Action when Button is Pressed
IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when i used NSLog its returning the value
-(IBAciton)search:(id)sender{
RetrievalTVC *retriv = [[RetrievalTVC alloc]init];
[retrieve getValue:searchTrain.text];
retrieve.string = searchTrain.text;
@synthesize target;

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve =target;
retrieve.string = searchTrain.text;
}
使用
@property(非原子,强)NSString*string
而不是
@property(非原子,复制)NSString*string

还可以使用
@property(强,非原子)IBOutlet UITextField*searchTrain改为“@property(week,非原子)IBOutlet UITextField*searchTrain

好的,我发现了错误

不需要
viewDidLoad
中的
alloc
字符串。这里发生的情况是,您在字符串中设置值,然后推送视图
viewdiload
调用并重新分配它,因此该值为nil

使用
@属性(非原子,强)NSString*string
而不是
@property(非原子,复制)NSString*string

还可以使用
@property(强,非原子)IBOutlet UITextField*searchTrain改为“@property(week,非原子)IBOutlet UITextField*searchTrain

好的,我发现了错误


不需要
viewDidLoad
中的
alloc
字符串。这里发生的情况是,您在字符串中设置值,然后推送视图
viewdiload
调用并重新分配它,因此该值为nil

方法名称可能拼写错误

理解力

  • IRTViewController-它有文本字段,此值需要 转到RETRIEVALTVC
案例1。RETRIEVALTVC有一个IRTViewController的对象,请使用委托。 案例2。当用户仅点击按钮时,您将在IRTViewController中创建RETRIEVALTVC

案例1解决方案:

检索tvc.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
@property (nonatomic, assign) id target;
-(IBAction)search:(id)sender //Action when Button is Pressed
IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when i used NSLog its returning the value
-(IBAciton)search:(id)sender{
RetrievalTVC *retriv = [[RetrievalTVC alloc]init];
[retrieve getValue:searchTrain.text];
retrieve.string = searchTrain.text;
@synthesize target;

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve =target;
retrieve.string = searchTrain.text;
}

案例2:它必须与您的方法配合使用

方法名称可能拼写错误

理解力

  • IRTViewController-它有文本字段,此值需要 转到RETRIEVALTVC
案例1。RETRIEVALTVC有一个IRTViewController的对象,请使用委托。 案例2。当用户仅点击按钮时,您将在IRTViewController中创建RETRIEVALTVC

案例1解决方案:

检索tvc.h

#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
#import<UIKit>
@interface

   NSString *string;//comment this line ..this line is not required.
    @property (nonatomic, copy) NSString *string;

@end
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
-(IBAction)getValue:(NSString *)val;
#import<UIKit>
NSString *string;
@property (nonatomic, copy) NSString *string;
IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(IBAction)search:(id)sender //Action when Button is Pressed
@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
@property (nonatomic, assign) id target;
-(IBAction)search:(id)sender //Action when Button is Pressed
IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve = [[RetrievalTVC alloc]init];
retrieve.string = searchTrain.text;
//Here when i used NSLog its returning the value
-(IBAciton)search:(id)sender{
RetrievalTVC *retriv = [[RetrievalTVC alloc]init];
[retrieve getValue:searchTrain.text];
retrieve.string = searchTrain.text;
@synthesize target;

-(IBAciton)search:(id)sender{
RetrievalTVC *retrieve =target;
retrieve.string = searchTrain.text;
}

案例2:它必须与您的方法一起工作,代码行与您分配的代码行相同。新的viewController是您进行分配(=)的地方

i、 在VC1中,让我们说string=VC1String,在VC2中,让我们说string=VC2String

在VC1.m内部,在分配VC2的同一行代码中(假设分配的名称也是VC2),只需编写:

VC2.VC2String = VC1String;

在您分配的同一行代码中,新的viewController是您应该进行分配(=)的地方

i、 在VC1中,让我们说string=VC1String,在VC2中,让我们说string=VC2String

在VC1.m内部,在分配VC2的同一行代码中(假设分配的名称也是VC2),只需编写:

VC2.VC2String = VC1String;

首先,在Appdelegate类中创建一个nsstring属性并对其进行合成。比如说-

在Appdelegate.h中:-

@property(nonatomic,retain)nsstring *objString;
在Appdelegate.m中:-

@synthesize objString;
现在,在ViewController中