Сохранить `` в NSString? - PullRequest
       30

Сохранить `` в NSString?

0 голосов
/ 09 августа 2009

Я хочу сохранить запись   в текстовом поле приложения iPhone. Однако ведение журнала и последующий просмотр UItextField показывают, что эта строка превращается в простое старое пространство ...

Когда я добавляю &nbsp к текстовому полю, он идет как одиночные символы до последней точки с запятой, после чего он исчезает из сообщения журнала и рассматривается как просто один пробел, таким образом ...

MyApp [17425: 20b] Записать строку & nbsp1234

// Я добавляю точку с запятой здесь ...

MyApp [17425: 20b] Записать строку 1234

Я хочу предотвратить автоматическое преобразование &nbsp, чтобы впоследствии его можно было отправить на веб-сайт и просмотреть в формате HTML. Могу ли я сделать это даже с помощью NSString или это потребует чего-то еще?

Edit: Я должен был также сказать, что я предпочел бы, чтобы UITextField также отображал это после сохранения данных в массиве и повторного заполнения UITextField из массива ... Я думаю, все сводится к тому, NSString действительно преобразует это или, если просто скрывает ... Думаю, я не совсем понимаю, что происходит с автоматическим превращением &nbsp в пространство (по крайней мере, для отображения) с NSString ...

Редактировать 2: 8/10/09 Извинения, если это неправильное использование, я не мог получить интерфейс, позволяющий мне публиковать "ответ", и не мог добавить комментарий ...

В ответ на вопрос Мэтта я опубликую некоторый код внутри другого редактирования ... Также представляет интерес регистрация «количества» строки между тем, когда строка содержала & nbsp и когда она содержала   ... Что мне показалось интересным, так это то, что кажется, что счет уменьшается, когда я "завершаю"  , вводя точку с запятой ... Первоначально это приводило к следующей ошибке, потому что (я думаю) счетчик строки и счетчик диапазона различались как только   будет завершено (я опубликую код чуть позже) ... - [NSCFString substringWithRange:]: диапазон или индекс вне границ '

Я исправил ошибку сбоя, используя количество строк в коде вместо счетчика диапазонов, но это по-прежнему интересно, и «литерал»   больше не отображается в текстовом поле ...

2009-08-08 14: 58: 26.319 [17897: 20b] это str :: -> <p class="blankline"> & nbsp

2009-08-08 14: 58: 26.320 [17897: 20b] это счетчик чисел 27

// в этот момент я ввожу точку с запятой, и количество строк уменьшается ...

2009-08-08 14: 58: 28.095 [17897: 20b] это str :: -> <p class="blankline">

2009-08-08 14: 58: 28.096 [17897: 20b] это счетчик строк 23

2009-08-08 14: 58: 31.223 [17897: 20b] это str :: -> <p class="blankline"> a

2009-08-08 14: 58: 31.223 [17897: 20b] это счетчик строк 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] это счетчик чисел 26

2009-08-08 14: 58: 31.527 [17897: 20b] это str :: -> <p class="blankline"> asdf

2009-08-08 14: 58: 31.527 [17897: 20b] это счетчик чисел 27

Редактировать 4 8/10/09: размещенный выше код, потому что иначе он не будет отображаться ...

Спасибо, Мэтт, действительно интересно ... когда я публиковал свои комментарии, мне пришло в голову, что это может быть проблема с TextView - я попытался изменить пару настроек в IB, но ничего не изменилось с точки зрения "исчезновения" "&nbsp; Спасибо за то, что уделили время!

Редактировать 3: 8/10/09

- (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];
    }
}

Ответы [ 2 ]

0 голосов
/ 09 августа 2009

Это довольно легко проверить, но NSString не будет автоматически конвертировать ваши HTML-теги. Как выглядит ваш код, что вызывает эту проблему? NSString имеет -stringByAddingPercentEscapesUsingEncoding: но он просто URL кодирует строку. Кажется довольно странным, но должно быть объяснение. Как насчет того, чтобы показать нам код? : -D

0 голосов
/ 09 августа 2009

хочешь

что должно быть то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...