0

に変換されたものをclass 1保存する場合、何らかの理由でこの文字列を読み込もうとすると、機能しません。テキストボックスのテキストボックスに出力した文字列を書き込むと、空のままになります。テキストボックスで同じことをすると「1」になります。intstringclass 2loadStringclass 2class 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の最高の機能の1つです。

私が理解していることから、あなたの問題は、それsaveInString = loadstring;が何かを返すと思うことです。そうではありません。メソッドが呼び出されると、変数のポインターがコピーされます。

戻り値については、戻り値を使用してください。

このコードは言語に関して非常に大きな問題を抱えているため、ObjectiveCに関する優れた本から始めることを強くお勧めします。

于 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 に答える