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名前全体を出力します。

注:、、、、questionNumberおよびはnameすべてグローバル変数です。statebillSubject

4

3 に答える 3

0

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

(置き換えたい「何らかの文字パターン」は何ですか?それは本当に「%@」ですか?? それとも「@」だけですか?)

于 2013-03-14T19:26:16.393 に答える
0

そのため、完全な解決策ではありませんでしたが、なんとかこの問題を解決できました。namestate、およびbillSubjectを 1 つにまとめNSMutableArrayて保存しました。1 つの文字列であれ、1 つの文字列内の 10 個の単語であれ、単語のすべてのケースが呼び出されるようになりました。global の何が問題だったのかはわかりませんNSStringが、この問題は解決されました。

于 2013-03-15T11:58:47.717 に答える
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 に答える