在class 1
我保存int
转换为string
,在class 2
我尝试加载此字符串由于某种原因它不起作用,当我写我从loadString
到class 2
文本框的文本框中的字符串保持为空。
当我在class 1
中执行相同操作时,文本框变为“1”。
class 1.m
- (void)viewDidLoad
{
[super viewDidLoad];
countForString = 1;
saveString = [[NSString alloc]initWithFormat:@"%i", countForString];
[self SaveTextBox:saveString :@"Number"];
}
-(void)SaveTextBox:(NSString*)string :(NSString*)stringsave
{
NSString *savestring = string;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:savestring forKey:stringsave];
[defaults synchronize];
}
class 2.m
- (void)viewDidLoad
{
[super viewDidLoad];
[self loadString:@"Number":teamString];
tbTeamPlayer.text = teamString;
}
-(void)loadString:(NSString *)location:(NSString *)saveInString
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *loadstring = [defaults objectForKey:location];
saveInString = loadstring;
}
答案 0 :(得分:1)
您确实需要处理命名变量,并使用参数命名。这是ObjC中最好的功能之一。
据我所知,你的问题是你认为saveInString = loadstring;
会返回一些东西。它不是。调用方法时会复制变量的指针。
要返回值,请使用返回值。
我强烈建议从一本关于Objective C的好书开始,因为这段代码在语言方面存在很大的问题。
答案 1 :(得分:0)
loadString:location:
不会更改saveInString
的值,它只会覆盖局部变量。您需要返回字符串并设置该值,例如
tbTeamPlayer.text = [self loadString:someLocation];
并将loadString更改为:
- (NSString *)loadString:(NSString *)location
{
return [[NSUserDefaults standardUserDefaults] stringForKey:location];
}
答案 2 :(得分:0)
在loadString方法中, saveInString 的新引用已创建。因此无法反映对原始参考的任何新修改。