我已经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
请帮助..数百万提前感谢:)
答案 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
可能此retrieve
与retrieve
不等。
答案 5 :(得分:0)
我认为合成变量RetrievalTVC.m 类文件可能会遗漏。
从以下位置更改属性:
@property (nonatomic, copy) NSString *string;
为:
@property (nonatomic, retain) NSString *string;
如果所有解决方案都不起作用,那么为什么不喜欢使用委托变量,即Global。
看看这个,它会解决你的问题:
答案 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)
方法名称拼写错误
了解
案例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;