不知何故NSUserdefaults保存不起作用

时间:2012-10-05 08:47:50

标签: objective-c xcode

class 1我保存int转换为string,在class 2我尝试加载此字符串由于某种原因它不起作用,当我写我从loadStringclass 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;
} 

3 个答案:

答案 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 新引用已创建。因此无法反映对原始参考的任何新修改

参考nsstring-returns-empty-from-a-return-method链接。