0

class 1我保存int转换为 astring时,在class 2我尝试加载此字符串时,由于某种原因它不起作用,当我将从文本框中取出的字符串写入loadString文本框时class 2,文本框保持为空。当我在class 1文本框中做同样的事情时变成“1”。

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];
}

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;
} 
4

3 回答 3

1

您确实需要处理命名变量,并使用参数命名。它是 ObjC 中最好的功能之一。

据我了解,您的问题是您认为这会saveInString = loadstring;返回一些东西。它不是。当方法被调用时,变量的指针被复制。

对于返回值,使用返回值。

我强烈建议从一本关于 Objective C 的好书开始,因为这段代码在语言方面存在很大的问题。

于 2012-10-05T08:55:18.160 回答
0

loadString:location:不会改变 的值saveInString,它所做的只是覆盖局部变量。您需要返回字符串并设置该值,例如

tbTeamPlayer.text = [self loadString:someLocation];

并将 loadString 更改为:

- (NSString *)loadString:(NSString *)location
{
    return [[NSUserDefaults standardUserDefaults] stringForKey:location];
}
于 2012-10-05T08:52:19.653 回答
0

在您的 loadString 方法中,创建了saveInString的新引用。因此它不能反映对原始参考的任何新修改

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

于 2012-10-05T08:58:58.863 回答