所以我试图将一堆输入字符串连接在一起作为一个字符串,这样我就可以将它保存到文本文件中。 到目前为止,我正在尝试写这样的东西
NSString *tempString = [[NSString alloc]initWithFormat:@"%@%@%@", text1, text2, text3];
唯一的问题是我需要以这种方式存储总共30个字符串。我需要一种方法来做到这一点,而无需输入每个字符串名称。有没有办法使用for循环或其他东西来实现这一目标?或许输入这样的字符串?
text(i)
这样变量名每次进入for循环时都会改变。我尝试过做这样的事情,我无法让它发挥作用。如果你可以帮助我使用这种方法或你知道的其他方式,我会非常感激。
答案 0 :(得分:3)
好的,所以这里的所有答案都采取了错误的方法(对不起)。
根本问题在于您使用“文本框”作为数据源,而它们应该只是视图。当有人更改文本时,您应立即将它们存储在模型中(可能是一个简单的数组),然后再引用该模型。 (这是MVC的一部分。如果您不熟悉,请查看它,如果您正在为iOS编程,应该如此!)
这是我要做的。 (我假设你的“文本框”是UITextField
的。)
将每个文本字段的标记设置为一个数字,表示您希望字符串加入的顺序。(即1-30)
如果您的数据模型没有单独的类,则在视图控制器中设置一个声明的属性,该属性存储对NSMutableArray
的引用,该引用可以按顺序包含所有字符串。我们称之为dataSource
。在viewDidLoad:
中将其设置为填充空值的实际可变数组(如果要保存它们,则设置为先前存储的值)。我们存储空值的原因是我们可以使用用户为任何索引输入的字符串替换它们,即使它们是无序输入的:
- (void)viewDidLoad
{
[super viewDidLoad];
self.dataSource = [[NSMutableArray alloc] initWithCapacity:20];
for(int i = 0; i < 30; i++)
[self.dataSource addObject:@""];
}
然后,使用以下文本字段委托方法,该方法在输入数组时将字符串存储到数组中:
// This is called every time that a text field finishes editing.
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (textField.tag > 0)
[self.dataSource replaceObjectAtIndex:textField.tag-1 withObject:textField.text];
}
恭喜!您的所有字符串现在都存储在一个数组中。现在我们只需将它们全部组合起来:
NSMutableString *theString = [self.dataSource componentsJoinedByString:@""];
请注意,我没有对所有这些进行测试,因此可能存在拼写错误。这应该让你指向正确的方向!
答案 1 :(得分:1)
如果您在Interface Builder中使用IBOutletCollection(UITextField)
设置文本框,则会有一组文本框,您可以使用KVC访问文本值并加入它们。
//interface
...
@property (nonatomic, strong) IBOutletCollection(UITextField) NSArray *textBoxes;
//implementation
...
NSString *tempString = [[textBoxes valueForKey:@"text"]
componentsJoinedByString:@""];
Using iOS 4's IBOutletCollection
如果以编程方式创建文本框,则在创建时将它们添加到数组中。
答案 2 :(得分:0)
NSMutableString
's appendString:
方法是你的朋友。
NSArray *strings = [NSArray arrayWithObjects: @"Hi", @" there", @" dude", nil];
NSMutableString *result = [[NSMutableString alloc] init];
for (NSString *string in strings) {
[result appendString:string];
}
NSLog(@"result: %@", result); // result: Hi there dude