0

 iPhone アプリケーションのテキスト フィールドにのエントリを保持したい。ただし、UItextField のログとその後の表示は、この文字列が単純な古いスペースに変わっていることを示唆しています...

テキストフィールドに追加&nbspすると、最後のセミコロンまで単一の文字として表示され、その時点でログメッセージから消え、単なる単一のスペースとして表示されます...

MyApp[17425:20b] 文字列  1234 をログに記録します

// ここにセミコロンを追加します...

MyApp[17425:20b] 文字列 1234 をログに記録します

私がやりたいことは、&nbsp自動的に変換されないようにすることです。これにより、後で Web サイトに送信して HTML として表示できるようになります。NSString でそれを行うこともできますか、それとも何か他のものが必要ですか?

編集:データを配列に保存し、配列から UITextField を再設定した後、UITextField にもこれを表示することを好むと言うべきでした... NSString が本当にこれを変換するか、それを非表示にするだけの場合... &nbspNSStringを使用して(少なくとも表示用に)自動的にスペースに変換する方法がはっきりしないと思います...

編集 2: 2009 年 8 月 10 日 これが間違った使い方である場合はお詫びします。「回答」を投稿したり、コメントを追加したりできるインターフェイスを取得できませんでした...

マットの質問に答えて、別の編集内にいくつかのコードを投稿します...文字列に   が含まれているときと含まれているときの間の文字列の「カウント」のログも興味深いです ...私が興味深いと思ったのはセミコロンを入力して「完了する」とカウントが減少するよう です... もともとこれは、文字列のカウントと範囲のカウント が完了した時点で異なるため(だと思います)、次のエラーが発生しました(私はポスト コード)... -[NSCFString substringWithRange:]: 範囲または範囲外のインデックス'

範囲カウントの代わりにコード内の文字列カウントを使用してクラッシュエラーを修正しましたが、それでも興味深いものであり 、テキストフィールドに「リテラル」が表示されなくなりました...

2009-08-08 14:58:26.319 [17897:20b] これは str::--> <p class="blankline"> です

2009-08-08 14:58:26.320 [17897:20b] これは str のカウント 27 です

// この時点でセミコロンを入力すると、文字列カウントが元に戻ります...

2009-08-08 14:58:28.095 [17897:20b] これは str です::-> <p class="blankline">

2009-08-08 14:58:28.096 [17897:20b] これは str のカウント 23 です

2009-08-08 14:58:31.223 [17897:20b] これは str::-> <p class="blankline"> a

2009-08-08 14:58:31.223 [17897:20b] これは str のカウント 24 です

2009-08-08 14:58:31.319 [17897:20b] これは str::--> <p class="blankline"> as

2009-08-08 14:58:31.320 [17897:20b] これは str のカウント 25 です

2009-08-08 14:58:31.423 [17897:20b] これは str::--> <p class="blankline"> asdです

2009-08-08 14:58:31.423 [17897:20b] これは str のカウント 26 です

2009-08-08 14:58:31.527 [17897:20b] これは str::--> <p class="blankline"> asdf です

2009-08-08 14:58:31.527 [17897:20b] これは str のカウント 27 です

編集 4 8/10/09: 他の方法では表示されないため、上記のコードを投稿しました...

ありがとうマット、実に興味深い...コメントを投稿していたときに、TextViewに問題がある可能性があることに気づきました-IBでいくつかの設定を変更しようとしましたが、「消える」という点では何も変わりません&nbsp; でしたお時間を頂きまして!

編集 3: 2009 年 8 月 10 日

- (void)textViewDidChange:(UITextView *)aTextView {
    [self updateTextViewPlacehoderFieldStatus];

    if (dismiss == YES) {
        dismiss = NO;
        return;
    }

    NSRange range = [aTextView selectedRange];
    NSArray *stringArray = [NSArray arrayWithObjects:@"http:", @"ftp:", @"https:", @"www.", nil];

    NSString *str = [aTextView text];
    NSLog(@"this is str::-->  %@", str);
    NSLog(@"this is str's count %d", str.length);
//as soon as I enter the semicolon, the printout of this log message displays a single space and the count decreases...
    int i, j, count = [stringArray count];
    BOOL searchRes = NO;

    for (j = 4; j <= 6; j++) {
        if (range.location < j)
            return;

        NSRange subStrRange;
       // subStrRange.location = range.location - j;
        //I took this out because adding &nbsp; to the post caused a mismatch between the length of the string from the text field and range.location
        //both should be equal, but my best guess is that the OS/Cocoa interprets &nbsp; as ONE space.
        //This caused NSString *subStr = [str substringWithRange:subStrRange]; to fail if the user entered &nbsp; in the text field
        subStrRange.location = str.length -j;
        subStrRange.length = j;
        [self setSelectedLinkRange:subStrRange];

       NSString *subStr = [str substringWithRange:subStrRange];
//Code crashed here with error -[NSCFString substringWithRange:]: Range or index out of bounds'
//I fixed this by using str.length instead of range.location

        for (i = 0; i < count; i++) {
            NSString *searchString = [stringArray objectAtIndex:i];

            if (searchRes = [subStr isEqualToString:[searchString capitalizedString]])
                break;else if (searchRes = [subStr isEqualToString:[searchString lowercaseString]])
                break;else if (searchRes = [subStr isEqualToString:[searchString uppercaseString]])
                break;
        }

        if (searchRes)
            break;
    }

    if (searchRes && dismiss != YES) {
        [textView resignFirstResponder];
        UIAlertView *linkAlert = [[UIAlertView alloc] initWithTitle:@"Link Creation" message:@"Do you want to create link?" delegate:self cancelButtonTitle:@"Create Link" otherButtonTitles:@"Dismiss", nil];
        [linkAlert setTag:1];  // for UIAlertView Delegate to handle which view is popped.
        [linkAlert show];
        MyAppAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
        [delegate setAlertRunning:YES];
        [linkAlert release];
    }
}
4

2 に答える 2

0

これは非常に簡単に確認できますが、NSStringはHTML タグを自動的に変換しません。この問題を引き起こしているコードはどのようなものですか? NSString には -stringByAddingPercentEscapesUsingEncoding: がありますが、文字列を URL エンコードするだけです。かなり奇妙に思えますが、説明が必要です。コードを見せてくれませんか。:-D

于 2009-08-08T21:59:40.587 に答える