2015-01-21 6 views
1

Это помечено как iOS, но я уверен, что он может быть полезен и для других SDK Parse. Как вы, возможно, знаете, Parse добавил возможность создания собственных подклассов PFObject к SDK 10 не так давно. Это отличное дополнение по ряду причин. Во-первых, это позволяет компилятору проверить код путем создания динамических свойств для атрибутов объекта:Методы инициализации для объектов подкласса PFObject, которые сгенерированы с помощью парсера

myObject[@"myAttribute"] преобразуется в myObject.myAttribute

Во-вторых, что более важно, чтобы этот вопрос, пользовательские подклассы могут иметь дополнительные функциональные возможности. Например, скажем, я создал приложение для сигнализации, которое хранит Alarm объектов в облаке Parse. В моем пользовательском подклассе я могу переопределить методы , - (void)saveEventually и - (void)deleteEventually, чтобы объект alarm мог планировать/обновлять/удалять UILocalNotification для себя при создании, модификации или удалении.

Здесь все усложняется, и возникает реальный вопрос. Скажем, пользователь создает сигнал тревоги на одном устройстве (который загружает его в облако), а затем автоматически синхронизирует его с другим устройством. Второе устройство, очевидно, обновляет содержимое в фоновом режиме PFQuery- (BFTask *)findObjectsInBackground и затем вызывает на каждом объекте , чтобы убедиться, что все его вещество находится на устройстве. Мой вопрос: какой метод (ы), если он есть, вызывается, когда подкласс PFObject найден или получен из базы данных облачных вычислений? Что касается объектов, инициализированных из локального хранилища данных?

Как я уже упоминал, переопределение различных методов прекрасно работает для объектов, которые создаются и управляются на устройстве, но я сбив с толку, как можно запускать собственный код из нового объекта, который только что прибыл в память, из локального или удаленный хранилище данных. Любые мысли или предложения о том, как с этим справиться, будут высоко оценены. Документация Parse не охватывает такой случай, поэтому, возможно, это даже не лучшая практика, но мне кажется, что это должно быть. В любом случае, спасибо за ваше время и ваши идеи.

ответ

0

Что касается большинства подклассов NSObject, то путь к переходу, вероятно, должен переопределить метод -init.

Однако, как вы упомянули в своем последнем абзаце, такая практика недокументирована, и вам, вероятно, следует избегать ее. Способ работы PFObjects позволяет иметь несколько экземпляров одного и того же объекта в памяти (несколько PFObjects с тем же objectId). И вы не контролируете, когда и почему создаются эти объекты, поэтому, полагаясь на код, выполняемый при их инициализации, вероятно, является плохой идеей. Если вы используете Core Data, обратите внимание, что Parse действительно обрабатывает все по-другому, поэтому лучшие методы отличаются.

Например, я не говорю, что это так, но что, если копия каждого объекта создается до его сохранения? Что, если объект создается дважды при выполнении запроса с политикой «cache then network»? Даже если вы заработаете, вы все равно получите что-то, что может сломаться при каждом обновлении Framework.

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

 Смежные вопросы

  • Нет связанных вопросов^_^