Как я изменяю цвет Алфавита стороны в индексируемом UITableView?

Предупреждение ResourceWarning: subprocess N is still running исходит из метода __del__ класса subprocess.Popen.

Если вы посмотрите на источник для этого метода , вы увидите следующий комментарий:

        # Not reading subprocess exit status creates a zombie process which
        # is only destroyed at the parent python process exit
        _warn("subprocess %s is still running" % self.pid,
              ResourceWarning, source=self)

Решение состоит в том, чтобы вы вызвали wait() для дочернего процесса.

Дополнительную информацию см. В разделе ЗАМЕЧАНИЯ на странице руководства для wait(2) .

В Python самый простой способ справиться с этой ситуацией - отслеживать все созданные вами Popen объекты и гарантировать, что что-то вызывает wait() для них, прямо или косвенно. [+1121]

Кроме того, вы можете установить обработчик SIGCHLD, который игнорирует события SIGCHLD; тогда ваши дочерние процессы немедленно исчезнут, но теперь вы не сможете вызвать wait() для них. См. Также Как я могу предотвратить дочерние процессы зомби? и Как я могу обрабатывать SIGCHLD?

45
задан cmos 15 April 2009 в 02:49
поделиться

2 ответа

Честно говоря, я редко видел тройной указатель .

Я посмотрел на поиск кода Google, и есть несколько примеров , но не очень хорошо освещающих. (смотрите ссылки в конце - ТАК не любит их)

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

Похоже, вам нужно какое-то объяснение, что такое указатели и как они работают? и есть некоторые примеры , но не очень освещающие. (смотрите ссылки в конце - ТАК не любит их)

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

Похоже, вам нужно какое-то объяснение, что такое указатели и как они работают? и есть некоторые примеры , но не очень освещающие. (смотрите ссылки в конце - ТАК не любит их)

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

Похоже, вам нужно какое-то объяснение, что такое указатели и как они работают? Вы можете найти ссылку на нее на странице 175 книги, если она у вас есть. Который дает доступ к цвету фона и шрифту. Вы можете увидеть неофициальный документ, относящийся к этому классу , здесь .

ПРЕДУПРЕЖДЕНИЕ Это недокументированное использование недокументированного класса, поэтому вы должны быть осторожны с его использованием.

Вот код фрагмент из поваренной книги с небольшими изменениями:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {    

  for(UIView *view in [tv subviews])
  {
    if([[[view class] description] isEqualToString:@"UITableViewIndex"])
    {

      [view setBackgroundColor:[UIColor whiteColor]];
      [view setFont:[UIFont systemFontOfSize:14]];
    }
  }

  //rest of cellForRow handling...

} 

Это иллюстрирует, как вы можете получить доступ к UITableViewIndex и изменить его в некоторых аспектах. Похоже, что представление не имеет никаких подпредставлений, поэтому, вероятно, оно выполняет произвольное рисование с массивом заголовков индекса.

Это не идеально, но, надеюсь, это немного поможет.

Пол

ПРЕДУПРЕЖДЕНИЕ Это недокументированное использование недокументированного класса, поэтому вы должны быть осторожны с его использованием.

Вот фрагмент кода из поваренной книги с небольшими изменениями:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {    

  for(UIView *view in [tv subviews])
  {
    if([[[view class] description] isEqualToString:@"UITableViewIndex"])
    {

      [view setBackgroundColor:[UIColor whiteColor]];
      [view setFont:[UIFont systemFontOfSize:14]];
    }
  }

  //rest of cellForRow handling...

} 

Это иллюстрирует, как вы можете получить доступ и UITableViewIndex просмотреть и изменить его в некоторых аспектах. Похоже, что представление не имеет никаких подпредставлений, поэтому, вероятно, оно выполняет произвольное рисование с массивом заголовков индекса.

Это не идеально, но, надеюсь, это немного поможет.

Пол

ПРЕДУПРЕЖДЕНИЕ Это недокументированное использование недокументированного класса, поэтому вы должны быть осторожны с его использованием.

Вот фрагмент кода из поваренной книги с небольшими изменениями:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {    

  for(UIView *view in [tv subviews])
  {
    if([[[view class] description] isEqualToString:@"UITableViewIndex"])
    {

      [view setBackgroundColor:[UIColor whiteColor]];
      [view setFont:[UIFont systemFontOfSize:14]];
    }
  }

  //rest of cellForRow handling...

} 

Это иллюстрирует, как вы можете получить доступ и UITableViewIndex просмотреть и изменить его в некоторых аспектах. Похоже, что представление не имеет никаких подпредставлений, поэтому, вероятно, оно выполняет произвольное рисование с массивом заголовков индекса.

Это не идеально, но, надеюсь, это немного поможет.

Пол

32
ответ дан 26 November 2019 в 20:48
поделиться

Создать изменяемый массив, содержащий метку альтернативного заголовка В

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

возвращают массив @ "", где количество пробелов между кавычками определяет ширину подсвечиваемой подсветкой. Пусть "sectionIndexTitlesForTableView" вызывает функцию метки обновления. В этой функции удалите все метки в массиве, который вы создали ранее, из их суперпредставлений. Затем создайте и добавьте столько меток, сколько необходимо. Затем добавьте их в супервидение таблицы.

Это строки, необходимые для размещения меток в нужном месте.

rect.origin.x = table.frame.origin.x+table.frame.size.width-rect.size.width-2;
rect.origin.y = 5+table.frame.origin.y+counter *(280-rect.size.height-([customIndexLabels count]-1))/([customIndexLabels count]-1);
if ([customIndexLabels lastObject]==thisLabel)
{
   rect.origin.y-=10;
}

Надеюсь, что это поможет. Это не идеально, я просто не достаточно, чтобы исправить это сам Основная проблема заключается в том, что интервал между последними метками неодинаков.

1
ответ дан 26 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

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