感谢帮助新手。我正在尝试使用SecondViewController.xib中的文本字段的值来设置WebService.m中的设置字符串。我已经包含了我的代码。当我执行应用程序时,来自WebService的NSLog给我一个输出“测试IP是:( null)”来自SecondViewController.m的NSLog是文本字段的值。你如何正确地将strIP传递给WebService.m?使用示例代码非常有用。
SecondViewController.h:
@interface SecondViewController : UIViewController
{
UITextField *ipAdd;
NSString *strIP;
}
@property (nontoxic, retain) IBOutlet UITextField *ipAdd;
@property (nonatomic, retain) NSString *strIP;
-(IBAction)textchanged:(id)sender;
+(SecondViewController*)sharedIP;
SecondViewController.m:
-(IBAction)textchanged:(id)sender
{
strIP = ipAdd.text;
NSLog(@"the string in the text field is: %@", strIP);
}
+(SecondViewController*)sharedIP
{
static SecondViewController *sharedIP = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedIP = [[SecondViewController alloc] init];
});
return sharedIP;
}
WebService.m:
SecondViewController *IP = [SecondViewController sharedIP] ;
NSLog(@"The test IP is: %@", IP.strIP);
答案 0 :(得分:1)
如果要修改块中的值,则需要在变量类型(sharedIP)上使用__block
类型说明符,因此块中的修改会影响块外的值。
另外:每次调用+ sharedIP时,都会将static的值设置为nil,并且只在第一次重置时才会重置。你的设计看起来有点奇怪......我不确定为什么你会想要一个视图控制器的静态实例,但我不知道你在追求什么。如果您只想要持久性数据,请参阅NSUserDefaults(这很酷,因为它会在重新启动时持续存在)。最好创建一个数据容器的静态实例来保存字符串值。
祝你好运。答案 1 :(得分:0)
在返回之前尝试打印相同的值。例如:
+(SecondViewController *)sharedIP { static SecondViewController * sharedIP = nil; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedIP = [[SecondViewController alloc] init];
});
**NSLog(@"The test IP is: %@", sharedIP.strIP);**
return sharedIP;
}
可能会有帮助
干杯