Мне нравятся ответы, которые предлагают вызвать исключение, но это подразумевает, что вы разработали обработку исключений в архитектуре вашего программного обеспечения.
Обработка ошибок обычно состоит из 3 частей: обнаружение, создание отчетов и восстановление. По моему опыту, ошибки подразделяются на классы серьезности (ниже приведен сокращенный список):
Ваши ошибки должны быть классифицированы, и обработка должна быть максимально обобщенной и последовательной. Если вам нужно учитывать, как обрабатывать каждую ошибку каждый раз, когда вы пишете новый код, у вас нет эффективной стратегии обработки ошибок для вашего программного обеспечения. Мне нравится иметь функцию отчетности, которая инициирует взаимодействие с пользователем, если продолжение зависит от выбора пользователя.
Ответ на вопрос, следует ли возвращать нуль (устаревший шаблон, если я его когда-либо видел), зависит от того, какая функция регистрирует ошибку, что может / должен делать вызывающая сторона, если функция завершается с ошибкой и возвращает ноль, и определяет ли серьезность ошибки дополнительную обработку.
Я только что получил программное развертывание и сворачивание NSSplitView
для работы. Я также настроил свой NSSplitView
так, чтобы он разворачивал / сворачивал подвид при двойном щелчке по разделителю, поэтому я хотел, чтобы это хорошо сочеталось с этой функцией (и, похоже, так). Вот что я сделал:
(в этом примере splitView
- это сам NSSplitView
, splitViewSubViewLeft
- это подпредставление, которое я хочу развернуть / свернуть, а lastSplitViewSubViewLeftWidth
- это переменная экземпляра типа CGFloat
.)
// subscribe to splitView's notification of subviews resizing
// (I do this in -(void)awakeFromNib)
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(mainSplitViewWillResizeSubviewsHandler:)
name:NSSplitViewWillResizeSubviewsNotification
object:splitView
];
// this is the handler the above snippet refers to
- (void) mainSplitViewWillResizeSubviewsHandler:(id)object
{
lastSplitViewSubViewLeftWidth = [splitViewSubViewLeft frame].size.width;
}
// wire this to the UI control you wish to use to toggle the
// expanded/collapsed state of splitViewSubViewLeft
- (IBAction) toggleLeftSubView:(id)sender
{
[splitView adjustSubviews];
if ([splitView isSubviewCollapsed:splitViewSubViewLeft])
[splitView
setPosition:lastSplitViewSubViewLeftWidth
ofDividerAtIndex:0
];
else
[splitView
setPosition:[splitView minPossiblePositionOfDividerAtIndex:0]
ofDividerAtIndex:0
];
}
Вы можете попробовать BWToolKit Брэндона Уокина.
Класс BWSplitView имеет метод
- (IBAction)toggleCollapse:(id)sender;
Просто скройте подвид, который вы хотите свернуть, например
[aSubViewToCollapse setHidden:YES];
Вы также можете реализовать метод делегата - (BOOL) splitView: shouldHideDividerAtIndex: чтобы вернуть YES, чтобы скрыть разделитель при свертывании.