したがって、次のコード行があります。
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
名前全体を出力します。
注:、、、、questionNumber
およびはname
すべてグローバル変数です。state
billSubject