Tag: 核心数据

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

我使用coreData,一对多的realtionship,我有一个文件夹实体和一个文件实体。 一个文件夹可以有很多文件等等。 所以,我有两个ViewControllers,FolderViewController和FileViewController分别包含文件夹和文件。现在我有一个modalView,这是从文件夹和文件viewcontroller访问。 在这个VC中,我有一个button来重置所有数据。 所以当我点击这个我想所有的数据应该重置。 我用这个代码,这个函数是写在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]) { […]

内存泄漏与大型核心数据批量插入在Swift中

我将数以万计的对象插入到我的核心数据实体中。 我有一个单独的NSManagedObjectContext ,每次添加对象时,我都会在托pipe对象上下文中调用save() 。 它可以工作,但在运行时,内存从大约27M增加到400M。 即使导入完成后,它仍然保持在400M。 有许多关于批量插入的SO问题,大家都说要读取Efficiently Importing Data ,但是在Objective-C中,我很难在Swift中find解决这个问题的实例。

在Core Data中存储UIColor对象

我想将一个UIColor对象作为一个属性存储在一个Core Data实体上,然后检索它,并以与我实体上其他属性相同的方式使用它。 在我的研究中,虽然文献看起来很稀less,但是我发现这篇文章说这个属性应该被指定为“Transformable”,并且应该使用NSKeyedArchiver手动转换数据,并使用NSKeyedUnarchiver出来。 但是,后来我发现了一个更新的post,说所有必要的是将UIColor保存为CD中的Transformable属性,生成一个Managed Object子类,并像其他属性一样使用。 苹果文档本身会详细介绍如何存储和检索NSColor对象,但不是(我可以find)在UIColor 。 但是,这听起来像在CD中自动处理归档/解除归档。 也许。 我被这条线弄糊涂了: 如果您在Xcode中使用模型编辑器,请在属性的“types”popup框中select“可变形”,然后在“值变换器名称”文本字段中键入名称。 我假设他们正在谈论属性的名称,但是我不确定,特别是因为它警告明确指定变换器时可能出现的问题: 重要提示:尽pipe默认变换器是由NSKeyedUnarchiveFromDataTransformerName指定的变换器,但实际上这个变换器是反向使用的。 如果明确指定默认转换器,则Core Data将使用“错误的方向”。 我已经到了一个地步,我有一个名为“color”的新变形属性(没有命名变换器),并生成了一个新的包含新的“color”属性(typesid)的子类文件。 我只是很困惑。 有人可以给我一些关于如何从这里出发的明确指导吗? 我正在使用MagicalRecord来与核心数据接口,如果这很重要。 非常感谢您的帮助!

如何保留核心数据中的有序列表

我正在写一个API方法,返回一个Web服务的对象列表。 该服务还会caching结果,并尝试在再次访问Web服务之前返回caching的结果(如果有)。 所以我将这个列表存储在一个Core Data实体中。 但核心数据只允许将可能的关系存储在NSSet中,而不保存顺序。 但是我希望caching结果保留原来的订单(最初来自Web服务)。 我不一定知道这个命令是如何build立的(所以我不能sorting)。 那我该如何保存这个命令? 我的计划是存储一个string的对象ID,我可以稍后使用它们来订购: NSString *objectIds = @"1 5 2 9 4"; 这是做这件事的最好方法吗?

核心数据无法为获取PerPantmanID后的对象填充故障

我从Web服务器获取数据,在名为backgroundMOC的子私人背景上下文中处理数据。 这是一个mainMOC链接到主UI的孩子,所以保存在backgroundMOC触发UI变化。 mainMOC是mainMOC的子级,它是一个与持久性存储绑定的私有后台队列,因此在master上保存到磁盘。 我现在所做的就是接收数据,在backgroundMOC上创build新的对象,然后保存backgroundMOC (以便更新UI),保存mainMOC (这样我几乎可以保存到磁盘),并保存masterMOC (这样我可以最终写入磁盘)。 问题是,当对象通过提取结果控制器出现在UI中时, objectId仍然是临时的。 这会导致重复的行问题,如果我从服务器(偶然)收到相同的数据,我的backgroundMOC不知道这个对象已经存在,因为它没有被分配一个永久的id,所以它创build另一个对象。 当我重新启动应用程序,重复的对象消失,所以我知道这只是一个问题与id映射。 所以我想我可能会尝试 [backgroundMOC obtainPermanentIDsForObjects:backgroundMOC.registeredObjects.allObjects error:nil]; 保存之前(我已经尝试保存之后)。 但是,由于某种原因,调用这一行将引发exception: CoreData could not fulfill a fault for… 如果您有任何提示可能会导致我正确的方向,请分享。 谢谢 编辑:好的,所以最初我在调用backgroundMOC上的obtainPermanentIDsForObjects,它是mainMOC的子元素,它是masterMOC的子元素。 我把它切换,以便获得mainMOC上的id,并解决了我所有的问题(现在)。 我是不是应该在子上下文中调用obtainPermIds?

核心数据示例代码中存储NSArray?

我一直在寻找一些关于如何在核心数据中存储NSArray示例代码,但是一直没有任何运气。 任何人都不介意给我一些教程或例子,或者更好地写一个简单的样本作为这个问题的答案? 我已经阅读了这个,但它没有显示如何去实现一个NSArray的可转换属性的例子。 提前致谢!

使用父/子上下文时,批量大小不起作用

我已经能够在我的应用程序上确认这一点,并且我创build了一个快速示例应用程序来确认这一点。 这是设置: 您有两个托pipe对象上下文: masterMOC: NSPrivateQueueConcurrencyType, tied to persistent store coordinator mainMOC: NSMainQueueConcurrencyType, child of masterMOC, NOT tied to any store coordinator 这个设置受到WWDCvideo的启发,这表明我们可以通过将masterMOC设置为专用队列并将其绑定到持久存储来保存后台线程。 如果您使用mainMOC设置mainMOC (并且它必须是与绑定到UI的fetchBatchSize ),并设置fetchBatchSize ,则批处理大小将被忽略,并且所有实体都会同时出现故障。 我启用了SQLitedebugging注释,当滚动成千上万的行(批量大小为20)时,没有任何错误被触发。 如果我做一个简单的调整,即将持久性商店协调员绑定到mainMOC并使其成为根上下文(也就是说,它不再是master的子级),那么批量大小完美地工作,并且当我滚动数千行,几个故障被解雇。 这是预期的行为? 我错过了什么吗? 您可以在这里下载示例项目

核心数据 – 如何获取具有最大值属性的实体

我有一个实体Person与财产personId (personId是唯一的) 我怎样才能获取最大personId的人? (我想把这个人本身取而不是财产的价值)

重命名xcdatamodel文件

需要做什么来重命名.xcdatamodel文件。 重命名.xcdatamodel文件名,随着改变… NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"newfilename" withExtension:@"momd"]; __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; return __managedObjectModel; 和 NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"newfilename.sqlite"]; 不起作用! 我得到以下错误: 2011-04-11 17:19:54.164 ProjectName[5826:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model' *** Call stack at first throw: ( 0 CoreFoundation 0x00fa15a9 […]

在Swift中保存CoreData对多关系

我有一个一对多的关系,看起来像这样, 我已经在一个文件中设置了我的模型类来匹配: import CoreData import Foundation class Board: NSManagedObject { @NSManaged var boardColor: String @NSManaged var boardCustomBackground: AnyObject? @NSManaged var boardID: String @NSManaged var boardName: String @NSManaged var lists: NSSet } class List: NSManagedObject { @NSManaged var listID: String @NSManaged var listName: String @NSManaged var board: Board } 因为我从多个JSON端点获取数据,所以我必须从我的板上分别保存我的列表。 我想要做的是创build/更新与boardID匹配的董事会的名单 。 这是我多次尝试后的地方: func saveList(boardID: String, […]