Добавить поведение для удаления метода в синтаксическом анализе

У меня есть собственный подкласс PFObject, который отслеживает большой видеофайл на устройстве. Я хочу убедиться, что если я удалю PFObject, видеофайл также будет удален.

На данный момент, если переопределить все варианты метода удаления, но это кажется неправильным. Есть ли централизованный способ добавить поведение при удалении объекта?


person otusweb    schedule 03.11.2015    source источник
comment
Не могли бы вы уточнить вопрос. Видеофайл хранится на Parse или только локально? Существуют beforeDelete и afterDelete обработчики облачного кода, которые вы можете поместить в класс для обработки любых дополнительных операций очистки, которые могут вам понадобиться.   -  person Russell    schedule 03.11.2015
comment
Файл хранится локально   -  person otusweb    schedule 04.11.2015


Ответы (1)


Есть хук, который перехватывает каждое удаление на бэкенде (beforeDelete в облачном коде), но, судя по вопросу, похоже, что это неправильное место для перехвата, потому что файл, нуждающийся в удалении, является локальным.

Анализ недавно открыл исходный код SDK. Просмотр кода. Похоже, что в конечном итоге все варианты удаления вызывают deleteInBackground. Таким образом, одна идея - слишком умная, ИМО - заключалась бы в том, чтобы переопределить только эту. Но я думаю, что было бы неразумно полагаться на этот недокументированный факт.

Если вы управляете вызывающей стороной, одна из идей состоит в том, чтобы просто создать политику, которая никогда не будет вызывать удаление напрямую, и предоставить метод «otuswebDelete» для удаления объекта и файла.

Если вы не контролируете вызывающего абонента (или не доверяете себе, чтобы помнить свою собственную политику), я думаю, вам лучше, в соответствии с вашим текущим дизайном, просто переопределить несколько вариантов:

– delete
– delete:
– deleteInBackground
– deleteInBackgroundWithBlock:
– deleteEventually

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

Наконец, по причинам, слишком многочисленным, чтобы подробно описать их здесь, я имею привычку «обертывать» свои PFObjects (подкласс NSObject, который имеет свойство PFObject), а не создавать их подклассы.

Бремя этого подхода заключается в том, что создание средств доступа к свойствам немного утомительно, но взамен я получаю больше контроля над (а) использованием методов SDK (как в вашей проблеме), (б) сериализацией, (c) выборкой управление связанными объектами, (d) больше...

person danh    schedule 03.11.2015
comment
Не связанный с OP, но как человек, который регулярно создает подклассы PFObject, я заинтересован в вашей идее оболочки. Представляли ли вы таким образом несколько уровней наследования PFObject? Поскольку PFObject обычно допускает только один уровень подкласса. - person Russell; 03.11.2015
comment
@ Рассел, да, несколько уровней подклассов - еще одно преимущество упаковки. - person danh; 03.11.2015
comment
очень классная концепция, которую я должен буду попробовать. Спасибо, что поделился! - person Russell; 03.11.2015