从NSArray获取字符串,使用NSUserDefaults保存

时间:2013-07-09 01:06:43

标签: objective-c nsstring nsarray nsuserdefaults

我正在尝试使用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 个答案:

答案 0 :(得分: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传递包含字符串的变量:而只是传递对象本身,没有先前的格式。

答案 1 :(得分: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];

答案 2 :(得分:2)

NSString *str1=[textbox1.text];
NSString *str2=[textbox2.text];
NSArray *arr=[[NSArray alloc]initWithObjects:str1,str2, nil];

then use  NSUserDefaults

答案 3 :(得分:1)

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

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

如果你想要实际格式化字符串,我会将它分成多行。即:

NSString *entry1 = [NSString stringWithFormat:@"Sir %@", yourNameTextField.text];
NSArray *saveStrings = @[entry1, customPhraseTextField.text];