所以我有以下代码行:
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);
由于某种原因从未实际打印过。甚至不是空白行。但是,在寻找文本框的for循环之后,noText
仍为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
会打印整个名称。
注意:questionNumber
,name
,state
和billSubject
都是全局变量。
答案 0 :(得分:0)
[text stringByReplacingOccurrencesOfString:@"some character pattern" withString:name]
(你想要替换的“某些角色模式”是什么?它真的是“%@”??或者只是“@”,还是别的什么?)
答案 1 :(得分: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。如果foundTextBox为false,则noText仅设置为false。
(这是不必要的混淆逻辑。)
答案 2 :(得分:0)
所以我设法解决了这个问题,虽然它不是一个完美的解决方案。我将name
,state
和billSubject
合并为一个NSMutableArray
来存储它们。它现在回忆起一个单词的所有情况,无论是一个字符还是一个字符串中的10个单词。不知道全球NSString
有什么问题,但这个问题已经解决了。