Не американские символы в заголовках разделов для UITableView

Моя проблема устранена, выполнив следующую команду:

sudo apt-get install libmysql++-dev
13
задан Community 23 May 2017 в 22:34
поделиться

6 ответов

Вы следовали моему ответу на этот другой вопрос?

Я провожу некоторые тесты (перезагружаю свои объекты) и вижу странное прерывистое поведение. Это определенно сортирует их правильно (с 'A' сразу после 'A', но до 'Ä') иногда. Иногда это ставит символы вне A-Z все в конец (после 'Z'), хотя я не делал ничего особенного.

Также я заметил, что 'Å' нарисовано правильно, если вы вернете его строчную форму. Пытались ли вы переопределить разделIndexTitleForSectionName:, чтобы сохранить порядок, но изменить отрисованный символ?

.
1
ответ дан 1 December 2019 в 20:29
поделиться

Посмотрите, что вам нужно: Оборонительные попытки AJAX и AJAX в jQuery .

В основном в обработчике ошибок, вы можете сделать $ .ajax (это);

$.ajax({
  url : 'timeOutPage.html',
  type : 'get',
  timeout : 20000,
  error : function(xhr, textStatus, errorThrown ) {
     if (textStatus == 'timeout') {
       $.ajax(this);
       return;
     }
  }
 });

У связанной статьи есть более глубокий пример с ограничением повторных попыток и т.д.... как и в большинстве jQuery, вы можете почти скопировать/вставить их пример, чтобы начать.

-121--4746372-

Я сделал твит, как меню, нет полного кода, но я вел блог об этом. Надеюсь, это поможет!

http://petersteinberger.com/2010/01/tweetie-like-swipe-menu-for-iphone-apps/

-121--4197167-

Поэтому я не мог отпустить эту и нашел следующее:

Что вам нужно сделать в этом случае называется 'Юникод Нормализация Форма D'. Более подробно это объясняется в http://unicode.org/reports/tr15/ (предупреждение, длинный и сухой документ)

Вот функция, которая выполняет разложение, а затем отфильтровывает все диакритические знаки. Вы можете использовать это, чтобы конвертировать Äpple в Apple, а затем использовать первую букву для построения индекса.

- (NSString*) decomposeAndFilterString: (NSString*) string
{
    NSMutableString *decomposedString = [[string decomposedStringWithCanonicalMapping] mutableCopy];
    NSCharacterSet *nonBaseSet = [NSCharacterSet nonBaseCharacterSet];
    NSRange range = NSMakeRange([decomposedString length], 0);

    while (range.location > 0) {
        range = [decomposedString rangeOfCharacterFromSet:nonBaseSet
            options:NSBackwardsSearch range:NSMakeRange(0, range.location)];
        if (range.length == 0) {
            break;
        }
        [decomposedString deleteCharactersInRange:range];
    }

    return [decomposedString autorelease];
}

(Я нашел этот код в списке рассылки, забыл источник, но взял его и немного исправил)

15
ответ дан 1 December 2019 в 20:29
поделиться

Когда я сталкиваюсь с подобной ситуацией, первое, что я спрашиваю себя, - это «что делает Apple».

В качестве эксперимента я просто добавил «Joe Äpple» в свою адресную книгу iPhone, и он появился под простой буквой A. Я думаю, что в этом есть большой смысл.

Поэтому вместо того, чтобы бросать их под Z или Ä, вы должны сделать то же самое. Должен быть какой-то способ получить «базовую» букву символа Юникода для группировки.

3
ответ дан 1 December 2019 в 20:29
поделиться

Решали ли вы эту проблему?

Мне удалось добиться правильного отображения индекса заголовка раздела, реализовав sectionIndexTitlesForTableView: чтобы создать свой собственный массив заголовков разделов:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {

    NSMutableArray *indexKeys = [NSMutableArray arrayWithCapacity:30];
    NSArray *fetchedResults = [fetchedResultsController fetchedObjects];
    NSString *currKey = @"DEFAULT";

    for (NSManagedObject *managedObject in fetchedResults) {
        NSString *indexKey = [managedObject valueForKey:@"indexKey"];
        if (![indexKey isEqualToString:currKey]) {
            [indexKeys addObject:indexKey];
            currKey = indexKey;
        }
    }

    return indexKeys;
}

Здесь indexKey - это первая буква имени.

Однако это создает одну из двух проблем в sectionForSectionIndexTitle: вместо этого:

Если я просто возвращаю индекс для раздела, это теперь несортированный индекс и больше не соответствует порядку сортировки в fetchResultController:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return index;
}

В качестве альтернативы , Если я передаю вызов fetchedResultsController, он прерывается для заголовков индексов, не относящихся к США, потому что это больше не странные символы, используемые в fetchedResultsController:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}

Последний код генерирует ошибку следующего типа при переходе к " Ø "заголовок индекса:

Завершение работы приложения из-за неперехваченного исключения 'NSInternalInconsistencyException', причина: 'Заголовок индекса на 24 не равен' Ø '»

Обходной путь для этого - преобразовать оскорбительные символы обратно в их странные selves:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    if ([title isEqualToString:@"Æ"]) {
        title = @"\u2206";
    } else if ([title isEqualToString:@"Ø"]) {
        title = @"\u0178";
    } else if ([title isEqualToString:@"Å"]) {
        title = @"\u2248";
    }
    return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}

Вы можете найти значения Unicode в отладчике с помощью действия «Распечатать описание в консоль».

Однако хорошим решением было бы выяснить, почему происходит это странное кодирование, и предотвратить его.

1
ответ дан 1 December 2019 в 20:29
поделиться

У меня возникла та же проблема, о которой говорилось в исходном вопросе, т. Е. Расширенные символы (за пределами страницы 0 Unicode) не отображаются должным образом в строке индекса.

Хотя мне кажется, что я скармливаю NSFetchedResultsController правильные одиночные строки символов Юникода, взамен я получаю доступ к свойству sectionIndexTitles, это те же самые символы, у которых старший байт установлен в 0; например, символ \ u30a2 (БУКВА А КАТАКАНА) становится \ u00a2 (ЦЕНТРАЛЬНЫЙ ЗНАК).

Я не уверен, является ли это ошибкой в ​​методе sectionIndexTitleForSectionName: NSFetchedResultsController или моей собственной ошибкой где-то еще, однако мой обходной путь состоит в том, чтобы переопределить ее и выполнить то, что говорится в документации, внутренне:

- (NSString *)sectionIndexTitleForSectionName:(NSString *)sectionName
{
    NSString    *outName;

    if ( [sectionName length] )
        outName = [[sectionName substringToIndex:1] uppercaseString];
    else
        outName = [super sectionIndexTitleForSectionName:sectionName];

    return outName;
}

Это дает ожидаемый результат.

4
ответ дан 1 December 2019 в 20:29
поделиться

Просто добавив это в мой контроллер, я решил исходную проблему

- (NSString *)controller:(NSFetchedResultsController *)controller sectionIndexTitleForSectionName:(NSString *)sectionName {
return sectionName;}

Å, Ä и Ö отображаются правильно в списке

4
ответ дан 1 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: