2013-07-25 5 views
0

Я использую магическую запись в своем приложении.Магическая запись каскада delete (truncateAll) не удаляется

У меня есть отношения ...

Competition <-->> League 

т.е. Competition может иметь много Leagues. A League может иметь только один Competition.

Правило удаления от Competition to League установлено на Cascade. Правило обратного удаления установлено на Nullify.

Что бы я ожидал, это если я удалю Competition, тогда все Leagues, которые принадлежат ему, также удаляются. (Я успешно использовал это в предыдущих приложениях).

Я проверяю, делая ...

  1. Скачать и вставить все соревнования и лиги.
  2. Зарегистрировать все лиги с названиями соревнований.

    NSArray *leagues = [League findAll]; 
    for (League *league in *leagues) 
    { 
        NSLog(@"%@ - %@", league.name, league.competition.name); 
    } 
    
    e.g. Man UTD - Premier League 
    
  3. запустить следующий код ...

    [Competition truncateAll]; 
    
  4. Записывать все Лиги с именами конкуренции.

    e.g. Man UTD - (null) 
    

Я ожидал этого, чтобы удалить Leagues, а также Competitions?

Является ли мое предположение правильным в том, что он должен делать? Почему он этого не делает?

+1

Как вы «Зарегистрируйте все лиги с названиями соревнований»? Получаете ли вы их снова или используете существующие указатели для объектов? - Обратите внимание, что правила удаления применяются только при сохранении контекста или вызове 'processPendingChanges'. –

+0

Отредактировано для отображения кода журнала. Я думал, что это урезает? Я глуп. Я завернул обрезку в блок сохранения, и это сработало. Спасибо :) – Fogmeister

ответ

3

Отношения удалить правила применяются, когда управляемый объект контекст сохранен или processPendingChanges называется.

Как можно видеть в implementation метод MagicalRecord MR_truncateAll называет deleteObject на всех объектах субъекта, но не сохраняет контекст.

+0

Большое спасибо. Я знал это, просто мозг исчез. – Fogmeister

+0

Удаляет ли это базу данных? – user1007522

+0

@ user1007522: Нет, он удаляет все объекты данного объекта, например.'[Car truncateAll];' удаляет все объекты Car из базы данных. Могут быть другие объекты, которые не затрагиваются. Сам файл SQLite не удаляется. –

0

Я согласен с Мартином Р.

Просто добавьте следующие строки после

[Competition truncateAll]; 

[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; 

И вы будете хорошо идти! :)

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