相关疑难解决方法(0)

核心数据:删除实体所有实例的最快方法

我正在使用Core Data在本地持久保存Web服务调用的结果.Web服务返回完整的对象模型,比方说,"汽车" - 可能是大约2000个(我不能让Web服务返回任何小于1或所有汽车.

下次打开我的应用程序时,我想通过再次调用所有汽车的Web服务来刷新Core Data持久化副本,但是为了防止重复,我需要首先清除本地缓存中的所有数据.

是否有更快的方法来清除托管对象上下文中特定实体的所有实例(例如"CAR"类型的所有实体),或者我是否需要查询它们,然后遍历结果以删除每个实例,然后保存?

理想情况下,我可以说删除所有实体是Blah的地方.

core-data objective-c ios

373
推荐指数
11
解决办法
15万
查看次数

iOS:删除所有核心数据Swift

关于如何删除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值,而且我还需要遍历所有我无法用上下文做的值.

core-data ios swift

54
推荐指数
8
解决办法
5万
查看次数

如何从Core Data中的持久存储中删除所有对象?

我的核心数据在我的应用中运行.因此,我获取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)

iphone cocoa-touch core-data ios

16
推荐指数
3
解决办法
2万
查看次数

仅适用于iOS 10的Swift 3中的NSBatchDeleteRequest?

所以,迁移我的代码让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)

xcode ios swift

15
推荐指数
1
解决办法
2203
查看次数

iOS - RestKit并清除所有数据?

我正在使用RestKit进行webservice调用,缓存和etags.我实现了自己的coredata模型和managedObjects

一旦用户注销,我需要清除数据库中的所有数据.我能够成功删除sqlite文件并重新创建它,但我找不到清除所有RestKit捕获和etag数据的方法.如何完全擦除RestKit存储的所有数据?

iphone objective-c ios restkit

10
推荐指数
1
解决办法
6829
查看次数

如何从Core Data中删除所有对象

如何删除所有对象?我知道我可以删除一个

[managedObjectContext deleteObject:objToDelete];
Run Code Online (Sandbox Code Playgroud)

是否有可能删除所有没有迭代所有数组?谢谢

iphone core-data objective-c

6
推荐指数
4
解决办法
1万
查看次数

当我只是将数据存储在内存(而不是磁盘)中时,如何有效地擦除我的Core Data存储?

我正在将Core Data与内存存储一起使用,我想在某些时候完全擦除它.我发现的与此相关的大多数问题都与磁盘存储有关,涉及删除存储文件或所有托管对象.

当它在内存中时有更简单的方法吗?我可以设置一些东西nil并完成它吗?

cocoa-touch core-data objective-c ios

6
推荐指数
2
解决办法
649
查看次数

重新加载CollectionView不会清除以前加载的单元格

我有一个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 reloaddata ios uicollectionview restkit-0.20

5
推荐指数
1
解决办法
1万
查看次数

如何重置Core Data中的主键计数/最大值?

我已设法删除使用Core Data存储的所有实体(遵循此答案).

问题是,我注意到主键仍在向上计数.有没有办法(没有手动编写SQL查询)来重置实体的Z_MAX值?下面的截图来澄清我的意思.

值本身不是问题,但我只是担心在未来的某个时刻可能会达到最大整数,我不希望这种情况发生.我的应用程序将数据与Web服务同步并使用核心数据对其进行缓存,因此主键可能一次增加数百/千.删除整个Sqlite DB不是一个选项,因为我需要保留其他实体的一些信息.

我见过'重置'方法,但肯定会重置整个Sqlite数据库?如何重置这一组实体的主键?与我想要重置的主键没有关系到其他实体.

截图

iphone cocoa core-data objective-c

3
推荐指数
2
解决办法
1065
查看次数

如何以一对多关系清除/重置所有CoreData

我正在使用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 persistent-storage ios ios5 ios6

2
推荐指数
1
解决办法
3436
查看次数

为什么在重新启动应用程序或我执行 NSBatchDeleteRequest 两次之前不会删除条目?

我正在阅读删除/重置 Core Data 中的所有条目?.

如果我按照以下步骤操作,会得到意想不到的结果:

  1. 调用下面的代码
  2. 然后在模拟器中查询一个实体,我会取回一个实体!!!
  3. 如果我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

2
推荐指数
1
解决办法
359
查看次数

如何彻底清除核心数据模型?

如何在核心数据模型中完全清除一切,即删除所有实体的所有对象?

我将使用代码清除模型中保存的历史记录.

iphone xcode core-data objective-c ios4

1
推荐指数
1
解决办法
1万
查看次数