3

所以我试图将一堆输入字符串连接在一起作为一个字符串,这样我就可以将它保存到一个文本文件中。到目前为止,我正在尝试写这样的东西

NSString *tempString = [[NSString alloc]initWithFormat:@"%@%@%@", text1, text2, text3];

唯一的问题是我需要以这种方式存储总共 30 个字符串。我需要一种方法来做到这一点,而无需输入每个字符串名称。有没有办法使用 for 循环或其他东西来完成这个?键入这样的字符串可能吗?

text(i)

这样变量名在每次通过 for 循环时都会改变。我试过做这样的事情,但我无法让它工作。如果你能用这种方法或你知道的其他方法帮助我,我将非常感激。

4

3 回答 3

3

好的,所以这里的所有答案都采用了错误的方法(对不起,伙计们)。

根本问题是您将“文本框”用作数据源,而它们应该只是视图。当有人更改文本时,您应该立即将它们存储在您的模型(可能是一个简单的数组)中,然后再引用该模型。(这是 MVC 的一部分。如果您不熟悉,请查看它,如果您正在为 iOS 编程,您应该如此!)

这就是我要做的。(我假设您的“文本框”是UITextField's。)

  1. 将每个文本字段的委托设置为您的视图控制器。
  2. 将每个文本字段的标签设置为一个数字,该数字表示您希望字符串加入的顺序。(即 1-30)

  3. 如果您的数据模型没有单独的类,则在视图控制器中设置一个声明的属性,该属性存储对 a 的引用,该引用NSMutableArray可以按顺序包含所有字符串。让我们称之为dataSource。将此设置为viewDidLoad:一个实际的可变数组,其中填充了空值(或者如果要保存它们,则为以前存储的值)。我们存储空值的原因是我们可以将它们替换为用户为任何索引输入的字符串,即使它们是无序输入的:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.dataSource = [[NSMutableArray alloc] initWithCapacity:20];
        for(int i = 0; i < 30; i++)
            [self.dataSource addObject:@""];
    }
    
  4. 然后,使用以下文本字段委托方法,将输入的字符串存储到数组中:

    // 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];
    }
    
  5. 恭喜!您的所有字符串现在都存储在一个数组中。现在我们只需要将它们全部组合起来:

    NSMutableString *theString = [self.dataSource componentsJoinedByString:@""];
    

请注意,我没有测试所有这些,因此可能存在拼写错误。不过,这应该可以让您指出正确的方向!

于 2013-05-08T00:58:31.840 回答
1

如果您在 Interface Builder 中使用 an 设置文本框,您将拥有一组文本框,您可以使用KVCIBOutletCollection(UITextField)访问文本值并加入它们。

//interface
...
@property (nonatomic, strong) IBOutletCollection(UITextField) NSArray *textBoxes;


//implementation
...
    NSString *tempString = [[textBoxes valueForKey:@"text"] 
                            componentsJoinedByString:@""];

使用 iOS 4 的 IBOutletCollection

如果您以编程方式创建文本框,则在创建它们时将它们添加到数组中。

于 2013-05-08T00:09:52.983 回答
0

NSMutableStringappendString:方法是你的朋友。

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
于 2013-05-07T23:49:10.503 回答