Когда должен я использовать init:
и когда должен я использовать initWithNibName:bundle:
при создании контроллера представления?
Одной из проблем, с которой я столкнулся с долгосрочным экземпляром Trac, является поле "version". Нет различий между списком версий, которые могут быть назначены мандату, и списком версий, которые могут быть запрошены в пользовательском интерфейсе запроса. Так что если список версий для этого поля начинает становиться громоздким, вы не можете обрезать его, не ограничивая то, что вы можете искать.
В один из этих дней я собираюсь исправить это...
Trac 0,11 скорее является "скачкообразным" ресурсом, чем 0,10; в значительной степени благодаря переключению на Genshi для шаблонного двигателя. Вы можете следить за ресурсами на сервере, в частности за памятью. Я ожидаю увидеть некоторое повышенное внимание, уделяемое производительности в 0,13 или около того.
О, и если вы столкнетесь с проблемами, # trac на freenode может быть хорошим ресурсом.
Раскрытие информации: Я являюсь одним из разработчиков Trac
-121--2953967-Возможно, что-то сохраняется на .resx формы вместо .designer? Я не могу себе представить почему это так, но да...
Если все остальные ошибки не удается, попробуйте удалить ListView из формы. Затем создайте новую нежелательную форму в вашем проекте, воссоздав ListView на нежелательной форме, проверьте нежелательную форму, чтобы убедиться, что вы не получили странное поведение вуду, а затем скопируйте ListView из нежелательной формы обратно в вашу реальную форму?
Ужасно запутанный, я знаю...
-121--2850114- -initWeyNibName: bundle:
является назначенным инициализатором для UIViewController. Что-то должно в конце концов так и называться. Тем не менее, несмотря на примеры Apple (которые во многих случаях предпочитают краткость по сравнению с ремонтопригодностью), его никогда не следует вызывать извне самого контроллера вида.
Вы часто увидите код так:
MYViewController *vc = [[MYViewController alloc] initWithNibName:@"Myview" bundle:nil];
Я говорю, что это неправильно. Он помещает детали реализации (имя NIB и тот факт, что NIB даже используется) в вызывающего абонента. Это разрывает инкапсуляцию. Правильный способ сделать это:
MYViewController *vc = [[MYViewController alloc] init];
Затем в MYViewController:
- (instancetype)init
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
// Further initialization if needed
}
return self;
}
- (instancetype)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle
{
NSAssert(NO, @"Initialize with -init");
return nil;
}
Это перемещает сведения о реализации ключа обратно в объект и предотвращает случайный разрыв инкапсуляции вызывающими абонентами. Теперь при изменении имени NIB или переходе к программному построению он фиксируется в одном месте (в контроллере вида), а не в каждом месте, где используется контроллер вида.
Используйте initWithNibName: bundle:
, если вы ... инициализируете с помощью файла пера! То есть файл, созданный с помощью Interface Builder.
Если вы не используете IB для компоновки ваших представлений, вы можете просто использовать init
.