0

所以我有以下代码行:

text = [text stringByReplacingOccurrencesOfString:@"%@" withString:[NSString stringWithString:name]];

[NSString stringWithString:name]防止单个字符串异常。

但是,现在我的问题是,如果有人输入了一个name以上的单词,即name = @"John Doe";,则整行都会失败。我觉得这是一个非常简单的解决方法,但对于我的生活来说,我无法弄清楚。有谁知道怎么回事?

编辑:包括错误行周围的代码。

此函数存储名称:

- (void) buttonSelected:(UIButton *)button
{
NSString *text;
if ([button.titleLabel.text isEqualToString:@"NEXT"]  || [button.titleLabel.text isEqualToString:@"DEBATE BACK"] || [button.titleLabel.text isEqualToString:@"ISSUE A CLOTURE"])
{
    bool noText = true;
    bool foundTextBox = false;
    for (UIView *view in [scrollView subviews])
    {
        if (view.tag == 51)
        {
            if ([view isKindOfClass:[UITextField class]])
            {
                foundTextBox = true;
                UITextField *blah = (UITextField *)view;
                text = blah.text;
                NSLog(@"%@", text);
                if (![text isEqualToString:@""] && text != nil) noText = false;
            }
        }
    }
    if (!foundTextBox) noText = false;
    if (!noText)
    {
        if (questionNumber == 0)        name = text;
        else if (questionNumber == 1)   state = text;
        else if (questionNumber == 2)   billSubject = text;
        [self hideKeyboard];
        [UIView animateWithDuration:0.8 animations:^
         {
             for (UIView *view in [scrollView subviews])
             {
                 CGPoint origin = CGPointMake(-10 - (view.frame.size.width/2), view.frame.origin.y+(view.frame.size.height/2));
                 [view setTag:view.tag + 100];
                 [view setCenter:origin];
                 [view setAlpha:0.0];
             }
         }
         completion:^(BOOL finished)
         {
             for (UIView *view in [scrollView subviews])
             {
                 [view removeFromSuperview];
             }
             [self nextQuestion];
         }];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning!" message:@"You have not entered any text!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show]; [alert release];
    }
}
}

现在我想起来了,由于NSLog(@"%@", text);某种原因,从未真正打印过。甚至没有空行。但是,noText在查找文本框的 for 循环之后仍然为 false;

这里是调用name

- (void) setText:(NSString *) text label:(UILabel *) label
{
if (questionNumber == 1)
{
    NSLog(@"%@", name);
    text = [text stringByReplacingOccurrencesOfString:@"%@" withString:[NSString stringWithString:name]];
    label.text = text;
}
else
    label.text = text;
}

name确实打印了整个名称。

注意:questionNumbernamestate、 和billSubject都是全局变量。

4

3 回答 3

0

[text stringByReplacingOccurrencesOfString:@"some character pattern" withString:name]

(您希望替换的“某些字符模式”是什么?真的是“%@”吗?或者可能只是“@”或其他什么?)

于 2013-03-14T19:26:16.393 回答
0
bool noText = true;
bool foundTextBox = false;
for (UIView *view in [scrollView subviews])
{
    if (view.tag == 51)
    {
        if ([view isKindOfClass:[UITextField class]])
        {
            foundTextBox = true;
            UITextField *blah = (UITextField *)view;
            text = blah.text;
            NSLog(@"%@", text);
            if (![text isEqualToString:@""] && text != nil) noText = false;
        }
    }
}
if (!foundTextBox) noText = false;

如果 foundTextBox 设置为 true,!foundTextBox 将为 false,并且 noText 将保持为 true。noText 仅在 foundTextBox 为 false 时设置为 false。

(这是不必要的混乱逻辑。)

于 2013-03-14T23:51:40.983 回答
0

所以我设法解决了这个问题,尽管它不是一个完美的解决方案。我将name, state, 和billSubject合并到一个NSMutableArray可以存储它们的地方。它现在可以回忆一个单词的所有大小写,无论是一个字符还是一个字符串中的 10 个单词。不知道 global 出了什么问题,NSString但这个问题已经解决。

于 2013-03-15T11:58:47.717 回答