我可以通过编码在核心数据中创建和删除实体吗

Posted

技术标签:

【中文标题】我可以通过编码在核心数据中创建和删除实体吗【英文标题】:Can i create and delete entity in core data by coding 【发布时间】:2017-05-22 08:32:28 【问题描述】:

我想通过编码在核心数据中创建和删除实体(没有gui-Swift3),可以吗?

【问题讨论】:

【参考方案1】:

您可以在运行时创建实体以及实例,尽管这很不寻常,并且需要注意几个潜在问题。

首先,您可以创建NSEntityDescription 的实例来创建新实体。使用NSAttributeDescriptionNSRelationshipDescription 的实例来完成新实体。通过修改 NSManagedObjectModel 上的 entities 属性将新实体添加到托管对象模型。

在尝试之前您需要了解的事项:

    加载持久存储文件后无法修改模型。因此,您必须尝试使用模型访问任何数据之前执行上述操作。模型在您加载数据之前是读/写的,但之后才只读。加载数据后修改模型会导致应用崩溃。 您必须在每次将其与持久存储文件一起使用时创建相同实体,除非您执行模型迁移以反映新实体描述。 你不能使用NSPersistentContainer,因为它隐藏了太多细节。您必须使用较旧(但仍受支持)的方法,您可以编写自己的代码来加载模型,然后使用 addPersistentStore(ofType:configurationName:at:options:) 来加载持久存储文件。

【讨论】:

【参考方案2】:

您可以创建和删除实体的记录,但不能创建和删除实体本身。

模型不能在运行时更改。

【讨论】:

【参考方案3】:

我认为您无法创建/删除实体,因为模型不会在运行时更改。您可以创建 / 更新 / 删除 / 从实体中选择记录。

【讨论】:

【参考方案4】:

在coredata中保存或删除对象的三个函数:

-(BOOL)deleteObjectFromDB:(NSManagedObject *)object eSalva:(BOOL)andSave

if (!object) 

    NSLog(@"DB Error");
    return NO;



[_managedObjectContext deleteObject:object];

if (andSave)
    return [self saveDB];

return YES;

-(BOOL)saveDB

BOOL result;
result = [_managedObjectContext save:nil];

if (!result)
    NSLog(@"DB Error: database saving error");

return result;

删除所有对象

-(void) deleteAllObjects: (NSString *) entityDescription

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:_managedObjectContext];

[fetchRequest setEntity:entity];

NSError *error;
NSArray *items = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];


for (NSManagedObject *managedObject in items) 
    [_managedObjectContext deleteObject:managedObject];
    DLog(@"%@ object deleted",entityDescription);

if (![_managedObjectContext save:&error]) 
    DLog(@"Error deleting %@ - error:%@",entityDescription,error);

回到你的问题:

here there is a way to delete entities

希望对你有帮助。

【讨论】:

以上是关于我可以通过编码在核心数据中创建和删除实体吗的主要内容,如果未能解决你的问题,请参考以下文章

无法在具有 MagicalRecord [核心数据] 的实体中分配给 ...

了解在“便签本”中创建和更新的 CoreData 实体

在 RESTful API 中创建和验证实体模型及其 DTO 的正确方法是啥?

在一个 HTML 文件中创建和保存的 localStorage 数据可以在另一个 HTML 文件中使用吗?

有没有办法在 dart 中使用 JsonSerializable 创建 JsonKey 动态,我们可以从 JsonSerializable 类中创建和获取数组吗?

在 QLayout 中创建和删除自定义 QWidget 时出现 RAM 问题