2

我正在尝试使用 NSUserDefaults 将 2 个字符串保存到一个数组中,但是当我想获取这些字符串时会出现一些问题。

这是我的代码:

- (IBAction)closeSettingsView:(id)sender {


NSArray *saveStrings = [[NSArray alloc] initWithObjects:@"%@", @"%@", yourNameTextField.text, customPhraseTextField.text, nil];
NSUserDefaults *defaultsFields = [NSUserDefaults standardUserDefaults];
[defaultsFields setObject:saveStrings forKey:@"savedStrings"];
[defaultsFields synchronize];

}

- (void)viewDidLoad {
NSUserDefaults *defaultsFields = [NSUserDefaults standardUserDefaults];
NSArray *loadStrings = [defaultsFields stringArrayForKey:@"savedStrings"];

NSString *nameString = [NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:0]];
NSString *phraseString = [NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:1]];

NSLog(@"%@", nameString);
NSLog(@"%@", phraseString);


}

这是我的日志:

2013-07-09 02:59:31.639 Alarm Pro[219:60b] %@
2013-07-09 02:59:31.642 Alarm Pro[219:60b] %@

我该怎么做才能正确读取字符串?

4

4 回答 4

3

而不是在数组的开头添加两次 @"%@" 字符串:

NSArray *saveStrings = [[NSArray alloc] initWithObjects:@"%@", @"%@", yourNameTextField.text, customPhraseTextField.text, nil];

仅插入变量:

NSArray *saveStrings = [[NSArray alloc] initWithObjects:yourNameTextField.text, customPhraseTextField.text, nil];

使用您拥有的代码,该数组有 4 个对象,其中第一个和第二个是字符串 @"%@" 和 @"%@" 。因此,当您调用 [loadStrings objectAtIndex:0] 和 [loadStrings objectAtIndex:1] 时,输出是前两个字符串,@"%@" 和 @"%@"。

换句话说,您不是首先定义对象的格式,然后使用 initWithObjects: 传递包含字符串的变量,而只是对象本身,没有前面的格式。

于 2013-07-09T01:16:04.777 回答
2
NSString *str1=[textbox1.text];
NSString *str2=[textbox2.text];
NSArray *arr=[[NSArray alloc]initWithObjects:str1,str2, nil];

then use  NSUserDefaults
于 2013-07-19T06:55:14.757 回答
2

您的字符串被正确读取,只是您保存了错误的数据。

NSArray *saveStrings = [[NSArray alloc] initWithObjects:@"%@", @"%@", yourNameTextField.text, customPhraseTextField.text, nil];

这将创建一个包含 4 个元素的数组。其中前两个是@"%@",因此当您使用 objectAtIndex 0 和 1 时,它在两种情况下都正确返回 @"%@"。

您需要稍微重写您的保存代码:

NSArray *saveStrings = [[NSArray alloc] initWithObjects:yourNameTextField.text, customPhraseTextField.text, nil];
于 2013-07-09T01:16:21.130 回答
1

其他回答都是正确的。
您还可以使用新的 Obj-C 语法使其更具可读性。

NSArray *saveStrings = @[yourNameTextField.text, customPhraseTextField.text];

如果您确实想实际格式化字符串,我会将其拆分为多行。IE:

NSString *entry1 = [NSString stringWithFormat:@"Sir %@", yourNameTextField.text];
NSArray *saveStrings = @[entry1, customPhraseTextField.text];
于 2013-07-09T01:34:00.397 回答