2009-08-08 9 views
0

Я хочу сохранить запись   в текстовом поле приложения iPhone. Тем не менее, регистрация и последующий просмотр UItextField предполагают, что эта строка превращается в простое старое пространство ...Сохранение ` ` в NSString?

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

MyApp [17425: 20b] Вход строки & nbsp1234

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

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

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

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

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

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

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

2009-08-08 14: 58: 26,319 [17897: 20b] это ул :: -><p class="blankline"> & NBSP

2009-08-08 14: 58: 26.320 [17897: 20b] ул-х это подсчитывать 27

// в этот момент я вхожу в точку с запятой и счетчик строк падает обратно ...

2009-08-08 14: 58: 28,095 [17897: 20b] ул :: это - ><p class="blankline">

2009-08-08 14: 58: 28,096 [17897: 20b] это граф STR по 23

2009-08-08 14: 58: 31,223 [17897: 20b] это Обл :: -><p class="blankline">

2009-08-08 14: 58: 31,223 [17897: 20b] это граф STR в 24

2009-08-08 14:58:31.319 [17897: 20b] это Обл :: -><p class="blankline"> в

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] this is str :: -><p class="blankline"> asdf

2009-08-08 14: 58: 31.527 [17897: 20b] t его это граф STR по 27

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

Благодаря матовые, действительно интересно ... как я отправлял мои КОММЕНТАРИИ мне показалось, что это может быть проблемой с TextView - я попытался изменить пару настроек в IB, но ничего не изменилось с точки зрения «исчезающих» &nbsp;. Спасибо за ваше время!

Edit 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]; 
    } 
} 
+0

Ничего себе. Это очень странно. Я смог дублировать проблему, с которой вы сталкиваетесь, но это не может быть проблемой с NSString. Вы можете проверить это, создав NSString как этот NSString * hello = @ "Hello   World" ;. Затем распечатайте это с помощью NSLog. Нет, это как-то связано с свойством «text» UITextView. Возможно, вы захотите разместить на нем радар. Может быть, есть объяснение, но я еще не нашел его. Будет продолжать выглядеть так, как это довольно интересно. –

+0

Я не смог ничего с этим поделать. Я пробовал другие HTML-коды, и все они прекрасно печатаются. Кажется, это просто   Я бы написал ошибку: http://developer.apple.com/BugReporter/ -Matt –

+0

Спасибо, что посмотрел Мэтт ... приятно знать, что я этого не воображал! – 2009-08-16 07:55:45

ответ

0

вы хотите & # 160;

, который должен быть одним и тем же.

+0

Спасибо. Ну, я думаю, что либо сработает - но мне нужно, чтобы пользователи могли видеть и проверять - и они используются для ' ' Или вы хотите сказать, что в коде будет отображаться '& nbsp' в UITextField? – 2009-08-08 20:54:56

+0

Ahh, я думаю, что я понял - использование & # 160 заставило бы его работать как html, когда он будет отправлен на сайт, да? – 2009-08-08 21:00:29

0

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