MST

星途 面试题库

面试题:Objective-C的MagicalRecord Core Data封装下的数据关系处理

假设在一个Objective-C项目里,使用MagicalRecord封装Core Data,存在两个实体,一个是'Book'(书籍),另一个是'Author'(作者),它们是多对一的关系(多本书对应一个作者)。请描述如何通过MagicalRecord来正确设置和维护这种关系,并处理在删除作者时,相关联书籍的合理操作,同时写出关键代码。
18.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

设置和维护多对一关系

  1. 定义实体和属性: 在数据模型中,Book实体有一个指向Author实体的关系属性,例如命名为authorAuthor实体可以有一个反向关系属性(通常为books,用于方便获取该作者的所有书籍)。

  2. 创建对象并设置关系

// 创建作者
Author *author = [Author MR_createEntity];
author.name = @"张三";

// 创建书籍并关联作者
Book *book1 = [Book MR_createEntity];
book1.title = @"书籍1";
book1.author = author;

Book *book2 = [Book MR_createEntity];
book2.title = @"书籍2";
book2.author = author;

// 保存上下文
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

删除作者时处理相关联书籍

  1. 级联删除: 在数据模型编辑器中,选中AuthorBook的关系,将Delete Rule设置为Cascade。这样当删除Author时,与之关联的Book对象会自动被删除。

  2. 代码实现删除作者

Author *authorToDelete = [Author MR_findFirstByAttribute:@"name" withValue:@"张三"];
if (authorToDelete) {
    [[authorToDelete managedObjectContext] deleteObject:authorToDelete];
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
}

在上述代码中,由于设置了级联删除规则,当authorToDelete被删除时,所有与该作者关联的Book对象也会被一并删除。