使用 NSFetchedResultsController 更新 CoreData 对象
Posted
技术标签:
【中文标题】使用 NSFetchedResultsController 更新 CoreData 对象【英文标题】:Update CoreData Objects with NSFetchedResultsController 【发布时间】:2015-04-01 13:31:11 【问题描述】:我制作了一个使用 Core Data 并获取结果控制器的应用程序。
我可以添加 CoreData 对象,也可以删除它们。现在我想通过获取的结果控制器更新一个 CoreData 对象。我知道我必须获取对象然后我可以更改它。但是因为我还在学习,所以我不知道该怎么做。现在我想请教您如何做到这一点?
【问题讨论】:
【参考方案1】:当您从 CoreData 获取时,如果您修改结果,它将在您保存时更新 CoreData 中的实际值。
您需要先执行提取:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Entity" inManagedObejctContext:moc]];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
// error handling code
获得结果后,您可以修改各个记录...
MyEntity *entity = [results objectAtIndex:0];
entity.title = @"updated attribute";
// save context
[moc save:&error];
编辑:在swift中,它将类似于以下内容:
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
var moc = appDelegate.managedObjectContext!
var fetchRequest = NSFetchRequest()
fetchRequest.entity = NSEntityDescription.entityForName("Entity", inManagedObjectContext: moc)
var error: NSError?
var results = moc.executeFetchRequest(fetchRequest, error: &error)
// error handling code
var entity: MyEntity = MyEntity()
entity.title = "updated attribute"
moc.save(&error)
【讨论】:
感谢您的回答。如何在 Swift 中做到这一点? 我更新了答案以包含快速代码。我没有过多地使用 Swift,但它应该与我发布的内容非常相似。 你可以添加let appDelegate = UIApplication.sharedApplication() as AppDelegate; var moc = appDelegate.managedObjectContext!;
抱歉,我跳过了那部分......我应该包括它
我收到此错误:'UIApplication' is not convertible to 'AppDelegate'
和此错误:Use of undeclared type 'MyEntity'
我猜测这个错误,但请确保您使用的是UIApplication.sharedApplication().delegate
。此外,MyEntity 只是您可以从 CoreData 使用的可能实体的一个示例。您需要将该部分替换为您在 CoreData 模型中定义的实际 CoreData 实体和属性。这是一个很好的教程:jamesonquave.com/blog/core-data-in-swift-tutorial-part-1以上是关于使用 NSFetchedResultsController 更新 CoreData 对象的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中难以配置 NSFetchedResultsController