我正在使用Core Data在本地持久保存Web服务调用的结果.Web服务返回完整的对象模型,比方说,"汽车" - 可能是大约2000个(我不能让Web服务返回任何小于1或所有汽车.
下次打开我的应用程序时,我想通过再次调用所有汽车的Web服务来刷新Core Data持久化副本,但是为了防止重复,我需要首先清除本地缓存中的所有数据.
是否有更快的方法来清除托管对象上下文中特定实体的所有实例(例如"CAR"类型的所有实体),或者我是否需要查询它们,然后遍历结果以删除每个实例,然后保存?
理想情况下,我可以说删除所有实体是Blah的地方.
关于如何删除swift中的所有核心数据,我有点困惑.我创建了一个带IBAction链接的按钮.点击按钮我有以下内容:
let appDel: foodforteethAppDelegate = UIApplication.sharedApplication().delegate as foodforteethAppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
Run Code Online (Sandbox Code Playgroud)
然后我用各种方法搞砸了尝试删除所有核心数据内容,但我似乎无法让它工作.我已经使用removeAll从存储的数组中删除但仍然无法从核心数据中删除.我假设我需要某种类型的for循环但不确定如何从请求中创建它.
我尝试应用删除单行的基本原则
func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
let appDel: foodforteethAppDelegate = UIApplication.sharedApplication().delegate as foodforteethAppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
if editingStyle == UITableViewCellEditingStyle.Delete {
if let tv = tblTasks {
context.deleteObject(myList[indexPath!.row] as NSManagedObject)
myList.removeAtIndex(indexPath!.row)
tv.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: UITableViewRowAnimation.Fade)
}
var error: NSError? = nil
if !context.save(&error) {
abort()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这个问题是当我单击一个按钮时,我没有indexPath值,而且我还需要遍历所有我无法用上下文做的值.
我的核心数据在我的应用中运行.因此,我获取XML文件,将数据解析为模型对象并将其插入到核心数据中.它们保存在持久性存储中,我可以在重新启动应用程序时访问它们.但是,我希望能够随意刷新持久存储中的数据,因此我需要先从存储中删除现有对象.对此有直接的方法吗?
谢谢
我找到了这个解决方案
[managedObjectContext lock];
[managedObjectContext reset];//to drop pending changes
if ([persistentStoreCoordinator removePersistentStore:persistentStore error:&error])
{
NSURL* storeURL = [NSURL fileURLWithPath:[self pathForPersistentStore]];
[[NSFileManager defaultManager] removeFileAtPath:[storeURL path] handler:nil];
[self addPersistentStore];//recreates the persistent store
}
[managedObjectContext unlock];
Run Code Online (Sandbox Code Playgroud) 所以,迁移我的代码让Swift 3我有点卡住了.现在似乎NSBatchDeleteRequest需要iOS 10吗?我可以进行代码构建的唯一方法是使用以下代码段:
func removeAllChargerData(){
// Remove all charging data from persistent storage
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = ChargerPrimary.fetchRequest()
let entity = NSEntityDescription.entity(forEntityName: "ChargerPrimary", in: self.secondMoc)
fetchRequest.entity = entity
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try self.secondMoc.execute(deleteRequest)
} catch {
let deleteError = error as NSError
NSLog("\(deleteError), \(deleteError.localizedDescription)")
}
}
Run Code Online (Sandbox Code Playgroud)
但是,会显示一条警告,指示fetchRequest()仅在iOS 10更新和更新时可用.如果我定义fetchRequest以下方式,我得到一个错误,因为它期望fetchRequestto有一个NSFetchRequestResult参数类型:
let fetchRequest = NSFetchRequest<ChargerPrimary>(entityName: "ChargerPrimary")
Run Code Online (Sandbox Code Playgroud) 我正在使用RestKit进行webservice调用,缓存和etags.我实现了自己的coredata模型和managedObjects
一旦用户注销,我需要清除数据库中的所有数据.我能够成功删除sqlite文件并重新创建它,但我找不到清除所有RestKit捕获和etag数据的方法.如何完全擦除RestKit存储的所有数据?
如何删除所有对象?我知道我可以删除一个
[managedObjectContext deleteObject:objToDelete];
Run Code Online (Sandbox Code Playgroud)
是否有可能删除所有没有迭代所有数组?谢谢
我正在将Core Data与内存存储一起使用,我想在某些时候完全擦除它.我发现的与此相关的大多数问题都与磁盘存储有关,涉及删除存储文件或所有托管对象.
当它在内存中时有更简单的方法吗?我可以设置一些东西nil并完成它吗?
我有一个iOS应用程序,它利用RestKit 0.20.1从Restful Web服务中检索数据.我还应该添加应用程序使用CoreData.应用程序启动时,主屏幕是一个由默认搜索词填充的集合视图.标题中还有一个用作搜索栏的文本字段.
当用户使用搜索栏时,我无法清除以前加载的单元格.它只是加载新单元格并将之前的单元格向下推.这是适用的代码.
- (BOOL) textFieldShouldReturn:(UITextField *)textField {
//This sets up the NSDictionary for the Restkit postObject parameters
NSArray *objects =[NSArray arrayWithObjects:textField.text, nil];
NSArray *keys =[NSArray arrayWithObjects: @"query",nil];
NSDictionary *params = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
self.search=params;
//This is the POST request to the server
[[RKObjectManager sharedManager] postObject:nil path:@"/rest/search?ip=255.255.255.0" parameters:search success:nil failure:nil];
//This is what I thought would clear out the old and replace with the new
[self.collectionView reloadData];
[textField resignFirstResponder];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我引用了这个问题如何删除所有项目并向UICollectionView添加新项目?并且[collectionView reloadData]是公认的答案.
我选择了 …
我已设法删除使用Core Data存储的所有实体(遵循此答案).
问题是,我注意到主键仍在向上计数.有没有办法(没有手动编写SQL查询)来重置实体的Z_MAX值?下面的截图来澄清我的意思.
值本身不是问题,但我只是担心在未来的某个时刻可能会达到最大整数,我不希望这种情况发生.我的应用程序将数据与Web服务同步并使用核心数据对其进行缓存,因此主键可能一次增加数百/千.删除整个Sqlite DB不是一个选项,因为我需要保留其他实体的一些信息.
我见过'重置'方法,但肯定会重置整个Sqlite数据库?如何重置这一组实体的主键?与我想要重置的主键没有关系到其他实体.

我正在使用coreData,具有一对多的实现,我有一个文件夹实体和一个文件实体.文件夹可以包含许多文件,依此类推.
所以,我有两个ViewControllers,FolderViewController和FileViewController,它们分别包含文件夹和文件.现在我有一个modalView,可以从文件夹和文件viewcontroller访问.在这个VC中,我有一个重置所有数据的按钮.所以,当我点击这个时,我想要重置所有数据.
我使用了这段代码,这个函数是用appdelegate.m编写的,并从我的VC中调用.
- (void)resetToDefault
{
NSError * error;
// retrieve the store URL
NSURL * storeURL = [[__managedObjectContext persistentStoreCoordinator] URLForPersistentStore:[[[__managedObjectContext persistentStoreCoordinator] persistentStores] lastObject]];
// lock the current context
[__managedObjectContext lock];
[__managedObjectContext reset];//to drop pending changes
//delete the store from the current managedObjectContext
if ([[__managedObjectContext persistentStoreCoordinator] removePersistentStore:[[[__managedObjectContext persistentStoreCoordinator] persistentStores] lastObject] error:&error])
{
// remove the file containing the data
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
//recreate the store like in the appDelegate method
[[__managedObjectContext persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];//recreates the persistent …Run Code Online (Sandbox Code Playgroud) 我正在阅读删除/重置 Core Data 中的所有条目?.
如果我按照以下步骤操作,会得到意想不到的结果:
clearCoreDataStore再次调用(或重新启动),则不会从核心数据中检索该值我错过了什么?
func clearCoreDataStore() {
let entities = dataManager.persistentContainer.managedObjectModel.entities
for entity in entities {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entity.name!)
let deleteReqest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try context.execute(deleteReqest)
} catch {
print(error)
}
}
dataManager.saveContext()
}
Run Code Online (Sandbox Code Playgroud) core-data nsmanagedobject nsmanagedobjectcontext ios nsbatchdeleterequest
如何在核心数据模型中完全清除一切,即删除所有实体的所有对象?
我将使用代码清除模型中保存的历史记录.
core-data ×10
ios ×9
objective-c ×6
iphone ×5
cocoa-touch ×2
swift ×2
xcode ×2
cocoa ×1
ios4 ×1
ios5 ×1
ios6 ×1
reloaddata ×1
restkit ×1
restkit-0.20 ×1