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

时间:2017-05-22 08:32:29

标签: ios swift core-data swift3

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

4 个答案:

答案 0 :(得分:1)

您可以在运行时和实例中创建实体,尽管它非常不寻常并且有一些潜在的问题需要注意。

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

尝试此操作之前需要了解的事项:

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

答案 1 :(得分:0)

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

无法在运行时更改模型。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

保存或删除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

希望它有所帮助。