• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 尝试在 iOS 的 Core Data 中用另一个实体对象替换现有的实体对象

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:40:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在我的应用程序中使用 Core Data 进行存储,在应用程序中,有时我的“实体”会被修改(例如地址、城市、职位名称)。

我不想更新实体的特定属性,而是想通过创建一个方法来简化该过程,在该方法中,我将存储中的现有实体替换为同一实体的更新版本(没什么花哨的)。在我的方法中,我认为我必须获取所需的实体,但我该如何进行替换呢?这就是我感到困惑的地方。

这是我的相关代码:

    -(void)updateUserUser *)user {

        // Create fetch request
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName"User" inManagedObjectContext:_managedObjectContext];
        [fetchRequest setEntity:entity];

        // Create predicate
        NSPredicate *pred = [NSPredicate predicateWithFormat"userid == %@", user.userid];
        [fetchRequest setPredicate:pred];

        // Create fetched results controller
        NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 
        self.fetchedResultsController = theFetchedResultsController;
        _fetchedResultsController.delegate = (id)self;

        //what do I do next? 

        NSError *error;

        if (![_managedObjectContext save:&error]) {

            NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);

        }

   }

正如我所说,我只是想用新实体替换现有实体。我该怎么做?



Best Answer-推荐答案


我不认为替换对象比更改属性更简单。

但是要做你想做的,你需要这样的代码:

// I don't know the class for YourEntity, 
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error) {
    // handle fetch error
} else {
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName"User" inManagedObjectContext:_managedObjectContext];
    YourEntity *newEntity = [[YourEntity alloc] initWithEntityDescription:entityDescription insertIntoManagedObjectContext:_managedObjectContext];
    // change settings on 'newEntity'

    for (YourEntity *recordToDelete in results) {
        [_managedObjectContext deleteItem:recordToDelete];
    }
    [_managedObjectContext save:&error];
    if (error) {
        // handle save error
    }
}

关于ios - 尝试在 iOS 的 Core Data 中用另一个实体对象替换现有的实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925796/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap