разделение объекта между двумя viewcontrollers в цели c - PullRequest
2 голосов
/ 12 августа 2011

Я предполагаю, что это может быть глупый вопрос для начинающих, но я не могу найти ответ на него. У меня в основном есть два контроллера представления в моем приложении iphone, которые я хотел бы, чтобы они разделили третий класс (.m и .h), которые предполагают хранить данные, которые оба предполагают использовать. Скажем, например, что оба представления отображают местоположения и представляют таблицу с некоторой частью этой информации, которой я манипулирую - я хотел бы иметь третий класс, такой как движок, который будет делать все это, и эти представления просто создать экземпляр этого движка и при необходимости прочитать данные таблицы / местоположения.

Мой вопрос - как я могу создать экземпляр этого механизма в обоих моих представлениях, но на самом деле у меня есть только одна копия механизма, из которого оба представления читают. Я знаю, что при создании экземпляра дважды создаются две копии, и я этого не хочу. я надеюсь сделать этот двигатель "глобальным".

возможно ли это вообще в цели c? что будет лучшим способом для этого?

Большое спасибо всем.

Ответы [ 3 ]

2 голосов
/ 12 августа 2011

Вы можете рассмотреть возможность добавления <a href="http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/DeclaredProperty.html" rel="nofollow">@property</a> к обоим контроллерам представления, которые указывают на объект вашей модели ("движка"). Когда контроллеры представления созданы, вы можете установить, что @property указывает на модель. Если @property равно retain, модель не будет скопирована.

1 голос
/ 12 августа 2011

У вас есть много вариантов, когда дело доходит до этого.Следуя подходу MVC, вы на правильном пути в том, что у вас должна быть единственная копия этих данных (модель).Как вы получаете это на ваш взгляд контроллеров зависит от вас.Я дам два пути, и вы сможете увидеть, что работает лучше в вашей ситуации, но есть не только способы сделать это.Вариант 1) Создать синглтон для размещения вашей модели / данных.Вы, наверное, видели это в SDK при использовании таких вещей, как ... = [SomeController sharedInstance].Два контроллера представления могут просто использовать этот общий instace.Вариант 2) Вы можете создать экземпляр модели где-нибудь при запуске и передать ее непосредственно в контроллеры представления.Будь то синглтон или нет, это не их дело.Они просто знают, что имеют доступ к некоторым данным.Вы можете создать свойство как @property (nonatomic, retain) TheData * theData для каждого из контроллеров представления и передать его таким образом.

1 голос
/ 12 августа 2011

Поскольку у вас есть только один из этих «Двигателей», я бы посоветовал пойти по синглтон-маршруту.

Создайте статический метод, который возвращает экземпляр объекта, который вы хотите использовать совместно, и затем вы можете использовать этот метод в каждом классе.

прости мой синтаксис ... У меня нет целевого материала C передо мной, но по сути вы захотите сделать что-то вроде следующего.

EngineClass.h file:

STATIC EngineClass * getSingleton();
STATIC EngineClass * INSTANCE;

EngineClass.m file:
STATIC EngineClass * getSingleton()
{
  if(INSTANCE == null)
  {
      INSTANCE = new EngineClass();
  }
  return INSTANCE;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...