Как передать суперпредставление в Objective C

См. этот пост . Если вам нужно update, если вы хотите сохранить нули. Попробуйте сделать:

c=np.nansum(counter1).copy()   #I don't know why you use np.nansum, but you can pass it like this
c.update(np.nansum(counter2))
c
>>Counter({'c-factor': 0.0,
     'dice': 2.0,
     'precision': 2.0,
     'sensitivity': 2.0,
     'specificity': 2.0})

10
задан Chris Hanson 12 February 2009 в 19:55
поделиться

2 ответа

Вы не должны иметь, подпредставления говорят его суперпредставлению большую часть чего-либо. Необходимо сделать суперпредставление делегатом класса представления.

// MainView
MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(...) delegate:self];

Затем сохраните делегата в переменной экземпляра, объявленной id delegate. Когда Вы заканчиваете тянуть:

// MyView
- (void)doDrawing {
  drawStuff();
  [delegate didFinishDrawingView:(MyView *)self]
}

Теперь назад в Вашем MainView, реализуйте этот метод

- (void)didFinishDrawingView:(MyView *)aView;

сделать то, что Вы хотите.

Точка всего этого - то, так, чтобы маленькие классы в краю Вашего приложения (как маленькое подпредставление) не должны были должны быть знать, как большие классы выше их работают. Эта установка позволяет представлению передавать цепочку, но с сообщением, которое передает его собственное состояние вместо сообщения, которое сообщает другому объекту сделать что-то определенное. Это - способ, которым структурировано Какао так, чтобы классы могли быть легко снова использованы, и их события могут повторно ставиться целью однако, Вам нужны они, чтобы быть.

Ваше суперпредставление должно знать, что сделать, когда его подпредставление заканчивается. Подпредставление должно просто сообщить людям его законченный.


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

id delegate;

Запишите initiailizer для своего класса подпредставления, который похож на это:

- (id)initWithFrame:(CGRect)frame delegate:(id)aDelegate {
  [super initWithFrame:frame];
  delegate = aDelegate;
  return self;
}

Теперь у Вас есть инициализатор, который примет делегата, сохраняет того делегата и позволяет Вам затем называть методы на нем.

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

Хорошо во-первых в Objective C нет никакой потребности бросить к определенному классу, чтобы отправить ему сообщение. Например, можно просто сделать;

[self.superview resetDrawType];

Обеспечение родительского представления имеет следующую функцию;

- (void) resetDrawType {

}

Затем это должно работать правильно. Нет никакой потребности использовать неофициальные протоколы.

Также Ваше селекторное тестирование является неправильным, потому что оно не соответствует определению функции "resetDrawType". @selector (resetDrawType:) тестирует на функцию, названную "resetDrawType", который берет параметр, который Ваш не делает.

Это - то, как Вы протестировали бы на функцию выше;

if ([self.superview respondsToSelector:@selector(resetDrawType)])
    [self.superview performSelector:@selector(resetDrawType)];

(Вместо performSelector Вы могли также отправить сообщение непосредственно).

7
ответ дан 3 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

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