Есть несколько способов сделать это, и вы можете подумать о точном разделении труда здесь, с точки зрения контроллеров и моделей.Вещи могут стать довольно спагетизированными, если у вас слишком много звонков туда и обратно.
Однако, не вдаваясь во все это, основная вещь, которую вам нужно сделать, чтобы один объект получил доступ к другому объекту, это дать первыйссылка на второй.
В этом случае вы фактически создаете CherryBomb
в контроллере представления, поэтому в этой точке легко передать ему ссылку.Дайте вашему классу CherryBomb
еще один ивар, например:
SimpleGameViewController* cherryBombViewController;
Измените CherryBomb
, чтобы метод init
или ваш initializeCherryBomb
(это, вероятно, должен быть только один метод, кстати)берет такой указатель и присваивает его ивару:
- (void) initializeCherryBomb:(SimpleGameViewController*)vc
{
// ... whatever other stuff you do in here, plus something like:
cherryBombViewController = vc;
}
Когда вы вызываете это, передайте его self
в качестве параметра vc
.Затем, когда ваша бомба детонирует, она может вызвать какой-то метод, добавленный вами в контроллер, для удаления самого себя:
[cherryBombViewController handleDetonationOfCherryBomb:self];
Обратите внимание, что вы абсолютно не должны обращаться к массиву контроллера напрямуюэто деталь реализации, о которой ваша бомба не должна знать.В простых случаях вы можете быть немного неаккуратными в своих управляющих структурах, но никогда не вяжут с вашей инкапсуляцией.