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

时间:2012-02-07 04:09:21

标签: iphone ios cocoa-touch

我已经google了这个,甚至尝试在很多论坛中搜索,也尝试过Singleton等,但每次我的第二个VC&#c; c字符串返回一个NULL值。

RETRIEVALTVC是我的VC,我期待价值,IRTViewController是我的VC有TextField。

我已导入所有头文件。

这是我的RetrievalTVC

RetrievalTVC.h

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

在RetrievalTVC.m中,当我尝试读取字符串的值时,它返回NULL

- (void)viewDidLoad{
[self list];
}

- (NSMutableArray *)list{
  NSLog(@"Value of string: %@",string);
}

这是我的IRTViewController

IRTViewConroller.h

@property (weak, nonatomic) IBOutlet UITextField *searchTrain;
-(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

请帮助..数百万提前感谢:)

10 个答案:

答案 0 :(得分:1)

首先,在Appdelegate类中创建一个nsstring属性并合成它。例如 -

在Appdelegate.h中: -

@property(nonatomic,retain)nsstring *objString;

在Appdelegate.m中: -

@synthesize objString;

现在,在您输入字符串值的ViewController中,请执行以下操作: -

-(void)viewdidload
{
   Appdelegate *obj = (Appdelegate *)[[UIApplication sharedApplication]delegate];

obj.objString = Your String;
}

现在,您可以在任何您想要的视图控制器类中检索字符串的值。

使用相同的代码

创建对象“obj”
Appdelegate *obj = (Appdelegate *)[[UIApplication sharedApplication]delegate];

然后再做

RetrievingString = obj.objString;

通过这种方式,您可以轻松检索字符串值。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的字符串未初始化。

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

最好把它变成财产。

编辑:执行此操作。

RetrievalTVC.h

#import<UIKit>
@interface

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

@end

RetrievalTVC.m

#import"RetrievalTVC.h"

@implementation

@synthesize string;
// memory management

    - (void) dealloc
    {
    [super dealloc];
    [self.string release];
    }

并在您现有的代码中更新:

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

现在它会起作用

答案 3 :(得分:0)

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

<强> RetrievalTVC.h

@property (weak, nonatomic) NSString *string;

并在 RetrievalTVC.m 文件中进行综合。

答案 4 :(得分:0)

我认为你retrieve的范围可能不对。

-(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

的代码

可能此retrieveretrieve不等。

答案 5 :(得分:0)

我认为合成变量RetrievalTVC.m 类文件可能会遗漏。

从以下位置更改属性:

@property (nonatomic, copy) NSString *string;

为:

@property (nonatomic, retain) NSString *string;

如果所有解决方案都不起作用,那么为什么不喜欢使用委托变量,即Global。

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

global variable read/write access

答案 6 :(得分:0)

您应该像这样编写代码。

RetrievalTVC.h

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

在RetrievalTVC.m

- (void)viewDidLoad{
[self list];
}

-(IBAction)getValue:(NSString *)val
{

   string=val;
   NSLog(@"Value of string: %@",string);
}

- (NSMutableArray *)list{
string = [[NSString alloc]init];
 NSLog(@"Value of string: %@",string);
}

IRTViewConroller.h

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

IRTViewController.m

-(IBAciton)search:(id)sender{
RetrievalTVC *retriv = [[RetrievalTVC alloc]init];
[retrieve getValue:searchTrain.text];
retrieve.string = searchTrain.text;

答案 7 :(得分:0)

使用@property (nonatomic, strong) NSString *string;代替@property (nonatomic, copy) NSString *string;

也使用@property (strong, nonatomic) IBOutlet UITextField *searchTrain;代替`@property(周,非原子)IBOutlet UITextField * searchTrain

好的,我发现了错误

alloc中不需要viewDidLoad字符串。这里发生了什么你在字符串中设置值推送视图然后viewDidLoad调用并重新分配它,因此值为nil

答案 8 :(得分:0)

方法名称拼写错误

了解

  • IRTViewController - 它有文本提交,这个值需要 传递给RETRIEVALTVC。

案例1. RETRIEVALTVC有一个IRTViewController对象,使用委托。 案例2.当用户点击按钮时,您将在IRTViewController中创建RETRIEVALTVC。

案例1解决方案:

RetrievalTVC.h

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

RetrievalTVC.m

- (void)viewDidLoad{
[self list];
IRTViewController * iRTViewController = [[IRTViewController alloc] init];
iRTViewController.target = self;
}

- (NSMutableArray *)list{
string = [[NSString alloc]init];
 NSLog(@"Value of string: %@",string);
}

IRTViewConroller.h

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

IRTViewController.m

@synthesize target;

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

案例2:必须使用您的方法

答案 9 :(得分:0)

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

即。在VC1中可以说string = VC1String,在VC2中可以说string = VC2String。

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

VC2.VC2String = VC1String;