2015-05-11 6 views
-1

Im использует Parse для серверной части. И у меня есть табличное представление со списком объекта Контакты из Parse. Если пользователь нажимает на объект, он сохраняет его для синтаксического анализа и, если кратки снова удаляет его из разбора.Каков правильный способ воссоздать объект на Parse после его удаления?

Для экономии я использую метод:

- (void)addContact:(Contact *)contact withBlock:(void (^)(void))completion { 
    [contact saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     if (completion) completion(); 
    }]; 
} 

Для удаления использовать это:

- (void)removeContact:(Contact *)contact withBlock:(void (^)(void))completion { 
    [contact deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     contact.objectId = nil; 
     if (completion) completion(); 
    }]; 
} 

Я поставил ObjectId к нулю, потому что я использую это свойство в виде таблицы, чтобы увидеть, если объект Allready на синтаксический анализ его просто по телефону.

Проблема в том, что если пользователь выполняет такие действия, как: сохранение, удаление, сохранение.

  1. Сохранить: объект создается при разборе со всеми данными.
  2. Удалить: объект удален из разбора.
  3. Сохранить: объект создается при разборе, но без данных (только объектId).

Это обычная процедура? На телефоне объект всегда имеет все данные даже после метода удаления. Поэтому я предполагаю, что если я запустил метод сохранения на объекте со всеми данными, он сохранит его в синтаксическом анализе, даже если один и тот же объект проходит через удаление в прошлом.

Вот картинка из одного пустого объекта и тот, который сохраняется корректно со всеми данными: enter image description here

Что ваш опыт с этим? Наслаждайтесь решением этой проблемы и помогите сделать wold лучшим местом :)

+0

Можете ли вы опубликовать код, где и как вы устанавливаете поля для контакта? – Kex

+0

Можете ли вы просто установить флаг, когда он удален, а не удалять объект? – Wain

+0

@ Wain да, если я не решит его таким образом, я переключусь, чтобы отметить его как удаленный. –

ответ

2

Установка идентификатора объекта на нуль, поскольку вы полагаетесь на частные и недокументированные функции класса PFObject. Даже если бы это работало, это не всегда гарантировано.

Вы не должны удалять объект и просто устанавливать флаг, чтобы показать, что он был удален/удален и использует его для вашей логики.

Или вы должны фактически отбросить локальный объект после его удаления и создать новый объект с копией значений старых объектов.

+0

Отлично, я тоже думаю об этих двух подходах. Но я хочу убедиться, что это более удобный способ. Mayber его проблема с установкой objectId на nil. Сначала я удалю это и изменю код, а затем посмотрю, где я получу это. –

+1

Я думаю, что последнее предложение - построить новый, эквивалентный локальный объект и заменить удаленный в вашем источнике данных - это лучше всего. Выполнение так точно меняет состояние клиента на то, как оно было до первоначального сохранения. Никаких дополнительных флагов, и на самом деле PFObject предоставляет isNew BOOL, который будет правильным и надежным в этом проекте. – danh

+0

Упс. isNew(), похоже, находится в JS, а не Objective-C. Похож, что isDirty - почти эквивалентное обращение – danh