/ / Editando um Objeto Personalizado com Dados Básicos e Registro Mágico - ios, objetivo-c, sqlite, core-data, magicalrecord

Editando um Objeto Personalizado com Dados Básicos e Registro Mágico - ios, objetivo-c, sqlite, core-data, magicalrecord

Se eu tenho um objeto List e um objeto ListItem, e a List tem um relacionamento um-para-muitos com ListItem "s, o que parece ser o melhor design para editar uma lista? Eu busco a lista com

// Find the list we"re supposed to edit
temporaryList = [List MR_findFirstByAttribute:@"uniqueID" withValue:_editingListID];

e, em seguida, pode atualizar suas propriedades simples, como nome

        temporaryList.name = @"new name";

no entanto eu estou querendo saber como melhor atualizar seus listItems. Ele é armazenado em um NSSet de acordo com a estrutura do Core Data, e eu armazeno cada ListItem com o seguinte ao criar uma nova lista.

ListItem *listItem = [ListItem MR_createInContext:_managedObjectContext];

Então, quando eu vou editar o conteúdo de uma lista, eu gostaria de redefinir seu NSSet de ListItems

// something like
list.contents = nil;
list.contents = mynewarrayoflistitems

Mas então eu também preciso de uma maneira de excluir o antigoListItems que foram salvos na memória. Como devo fazer isso? Meu primeiro pensamento foi excluir a lista que está sendo editada (o que fará com que um efeito de casacade ocorra e excluirá todos os ListItems com ele, e então redefinirá todo o conteúdo, nome, id, etc. da lista). Essa é a melhor prática?

Respostas:

1 para resposta № 1

Como você já percebeu, a regra de exclusão em cascata só é aplicada quando um objeto é deletado. Por exemplo, se list é excluído então todos os relacionados listItem objetos também são excluídos.

E se contents é o relacionamento de muitos a partir de List para ListItem, então

list.contents = nil;

não aplica nenhuma regra de exclusão e não exclui os objetos anteriormente relacionados.

Mas você pode ir ao contrário: Se a regra de exclusão para o relacionamento inverso de List para ListItem está definido como "Nullify", então a exclusão de um item da lista removerá a partir do relacionamento, para que você possa iterar list.contents e excluir todos os relacionados objetos.

Isso tem a vantagem de que List objeto em si é preservado. Então você pode criar novos itens e adicioná-los à lista.