Tag: 核心数据

在表视图部分中排列核心数据对象

我正在使用NSSortDescriptors来订购核心数据对象,并根据date属性创build表视图部分。 使用这种types的SortDescriptor,表视图部分按预期sorting,但部分内的行也由相同的date属性sorting。 有没有办法在每个部分有另一个订购系统? 我猜主要的问题是核心数据存储date对象与date+时间值,这样就没有对象具有完全相同的date值。 但是我需要根据另一个属性来排列同一部分中的对象。 谢谢。 这里是我的NSFetchedResultsController的代码: -(NSFetchedResultsController*)fetchedResultsController{ if (_fetchedResultsController != nil){ return _fetchedResultsController; } NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init]; NSManagedObjectContext *context = self.managedObjectContext; NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context]; [fetchRequest setEntity:entity]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"itemDate" ascending:YES]; NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc]initWithKey:@"itemName" ascending:NO]; NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor,sortDescriptor1, nil]; fetchRequest.sortDescriptors = sortDescriptors; _fetchedResultsController = […]

在iPhone重新启动之后,部署到iphone的Xcode Swift应用程序将损失CoreData

我简单的Swift应用程序使用CoreData中的SQLite数据库作为表格视图数据。 我通过模拟器将应用程序部署到我的iPhone。 iPhone重新启动后,持久性数据不再存在….但应用程序启动。 我必须做些什么来保持数据的持久性? IOS9.2.1&Swift 2.0

如何使用当前的NSPersistentStore方法在本地和iCloud中创build可共享的Core Data .sqlite备份

我已经花费了相当长的时间来创build一个Core-Data备份的.sqlite文件的备份,并在本地和/或iCloud(无论用户喜欢什么)存储该备份以用于下载,恢复或分享。 让我先说一下,我并不是在谈论将持久存储转移到iCloud以供应用程序用作其数据源。 我只是问在这个问题上创build备份文件。 在2014年,苹果将核心数据SQLite商店的默认日记模式更改为WAL。 https://developer.apple.com/library/content/qa/qa1809/_index.html 随着这一变化,他们build议: 要安全地备份和还原Core Data SQLite存储,可以执行以下操作:使用以下NSPersistentStoreCoordinator类的方法(而不是文件系统API)备份和还原Core Data存储: – (NSPersistentStore *)migratePersistentStore 🙁 NSPersistentStore *)存储toURL:(NSURL *)URL选项:(NSDictionary *)options withType:(NSString *)storeType错误:(NSError **)错误 请注意,这是我们推荐的选项。 在此之前,我一直在使用NSFileManager来创build备份。 有了这个build议,我相信在本地创build备份的正确方法是添加一个新的持久性存储,然后使用NSPersistentStoreCoordinator方法addPersistentStoreWithType:configuration:URL:options:error将该持久性存储迁移到所需的备份位置migratePersistentStore:toURL:options:withType:error 。 我的问题有两个方面: 我以前会将我的数据压缩到NSData之前导出它,并将NSData直接写入文件。 我的文件扩展名将自定义到我的应用程序,通过电子邮件或其他iOS共享方法共享压缩数据。 使用migratePersistentStore:toURL:options:withType:error方法,我现在将得到一个.sqlite文件(及其相应的WAL文件等)在所需的位置,但我不知道如何共享此文件。 如果我压缩文件,不会有我失去了我努力保存的数据的危险,首先使用migratePersistentStore:toURL:options:withType:error ? 我相信是这样,但我确实希望让我的用户能够通过电子邮件等方式共享/保存备份,而现在我不知道该如何做到最好。 我很难理解如何使用migratePersistentStore:toURL:options:withType:error将文件备份到iCloud。 就像上面的共享示例一样,我看到我可以使用addPersistentStoreWithType:configuration:URL:options:error和migratePersistentStore:toURL:options:withType:error在本地获取所需的.sqlite副本,但如果我尝试上传本地文件到iCloud,我担心我会失去使用migratePersistentStore:toURL:options:withType:error工作保存的数据。 我一直在试图看看是否有一种方法可以/应该使用migratePersistentStore:toURL:options:withType:error将新创build的persistentStore直接移动到iCloud,但是我一直没能find任何关于如何这样做还是应该完成。 是否有一个特定的url,我需要用来表明persistentStore的目的地是iCloud? 我将不胜感激关于这些问题的答案可以分享的任何见解。

NSOrderedSet不会在XCode生成的iPhone类中生成

我在Lion上的XCode 4.1中创build了一个具有一对多关系的简单数据模型。 为此关系生成的属性的types是NSOrderedSet,由于types未知,所以无法编译。 我search了文档,了解到这是为Mac OS 10.7(Lion)添加的一种新的集合类,特别适用于托pipe对象(我只是习惯了苹果的工作方式:像集合types一样基本该语言是绑定到一个操作系统发布…有趣的) 这是有道理的,NdOrderedSet显然是NSSet和NSArray的特性的组合 – 也就是说,它有一个像数组一样的索引顺序,每个元素都像一个集合一样独特。 尼斯。 但是,我的问题是: 为什么不编译? 为什么XCode生成不能编译的东西? 我将自己在第一名:我的SDK是iOS 4.3,它早于狮子(而不是Mac OS,但iOS),并没有这个新的集合类。 好,够公平的,但是#2代表:为什么XCode为我生成它? 为什么不检测我的SDK并生成一些有用的东西? 为什么不给我一个select? 这使我到#3和#4 什么是解决方法? 我应该将其更改为NSSet或NSArray? XCode在4.0之前如何生成这些东西? 如果我使用NSOrderedSet(即让它工作),它是否会向前兼容以前的iOS版本?

iOS核心数据 – Sql-lite集成及其对数据可移植性的影响

关于在iOS平台(4.0+)上使用核心数据与Sql-lite数据持久性,我有一个非常基本的问题。 基本上我正在寻找build立一些跨平台的应用程序,基本上是相当数据密集型的,即从中央数据库得到频繁的更新。 根据我在下面阅读的内容,我得出的结论是,即使考虑到Core Data框架的固有性能优势,我将不得不利用FMDb直接读取SQL-Lite数据库,因为Core Data框架将是无法使用生成的数据库。 所以我的问题如下 1)我的结论是否有效? 有没有其他解决scheme,我俯瞰? 2)我可以混合使用吗? 我的理解是,核心数据框架主要是一个对象图pipe理API,我可以利用核心数据框架来pipe理对象的内存图,同时仍然使用FMDb来填充它? 我在iOS编程方面很新颖,所以任何见解都会很有帮助。 如果我对我的问题不太清楚,请随时提出任何问题。 谢谢 Shreyas N PS在我打耳光之前问一些可能已经回答的东西:),这里是我在发布之前查看的问题。 核心数据与SQLite 3 核心数据与SQLite经验丰富的开发人员 核心数据的SQLite文件在OS X和iPhone OS之间的可移植性 和其他一些地方在线使用一些基本的谷歌福。

核心数据与iCloud导致低内存警告和崩溃,内存使用量不断增长

我正在开发一个小型的业务应用程序,并且遇到了一个奇怪的内存问题,这个问题只有在使用Core Data和iCloud的时候才会出现。 如果我切换应用程序使用本地存储,随着时间的推移内存使用情况就好(通常17-18Mb)。 当我使用iCloud的应用程序,应用程序不断地使用越来越多的内存(每秒添加大约4-5Mb),直到它崩溃。 我已经做了一些与仪器分析,但无法弄清楚为什么会发生这种情况。 有没有人有任何想法如何开始寻找解决scheme? 下面是一个屏幕截图,显示了应用程序使用了多less内存,以及如何增长是线性的。 截图后,该应用程序崩溃了几秒钟。 以下是来自Core Data堆栈设置的一些代码。 NSString *iCloudEnabledAppID = @"iCloudData"; NSString *dataFileName = @"Moviedo.sqlite"; NSString *iCloudDataDirectoryName = @"Data.nosync"; NSString *iCloudLogsDirectoryName = @"Logs"; NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *iCloud = [fileManager URLForUbiquityContainerIdentifier:nil]; NSPersistentStoreCoordinator *psc = self.managedObjectContext.persistentStoreCoordinator; NSString *iCloudData = [[[iCloud path] stringByAppendingPathComponent:iCloudDataDirectoryName] stringByAppendingPathComponent:dataFileName]; NSURL *iCloudLogsPath = [NSURL fileURLWithPath:[[iCloud path] stringByAppendingPathComponent:iCloudLogsDirectoryName]]; NSURL […]

在Core Data中进行大量重量迁移之后试图保存数据

我正在处理需要大量重量迁移的iOS应用程序。 我正在做的是将我旧的数据模型中Integer64types的实体的属性types转换为新数据模型中的stringtypes。 因为我正在改变属性的types,这需要大量的重量移植。 现在,转换工作正常,但不幸的是,我在转换后保存新实体时遇到了问题,这就是为什么当我在迁移后启动我的应用程序时,我无法查看使用旧的数据模型。 这里是我使用的NSEntityMigrationPolicy的子类: – (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError *__autoreleasing *)error { NSManagedObject *newObject; NSEntityDescription *sourceInstanceEntity = [sInstance entity]; NSManagedObjectContext *destMOC = [manager destinationContext]; //correct entity? just to be sure if ([[sourceInstanceEntity name] isEqualToString:@"MyEntity"]) { newObject = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:destMOC]; //obtain the attributes NSDictionary *keyValDict = [sInstance committedValuesForKeys:nil]; NSDictionary *allAttributes = […]

如何观察是否从managedObjectContext中删除了NSManagedObject

我在应用程序中的某个位置(并加载另一个存储)从persistentStoreCoordinator中删除persistentStore并reset我的managedObjectContext。 当我这样做的时候,根据文档,我还需要删除所有被提取的managedObjects的引用: 所有接收者的被pipe理对象都被“遗忘”了。如果你使用这个方法,你应该确保你也放弃了对使用接收者获取的任何被pipe理对象的引用, 因为之后它们将会失效。 我想避免必须通过我所有的fetchedResultsControllers,caching,可能包含managedObjects的数组,也可以存储对象的详细视图等。 相反,我更喜欢观察被pipe理对象的isInserted状态是否改变。 就像是 [myObject addObserver:self forKeyPath:@"isInserted" options:0 context:nil]; 不幸的是,这似乎并不奏效。 所以 – 我怎么能观察是否从managedObjectContext中删除了一个NSManagedObject?

如何使用链式虚拟财产的NSPredicate?

假设两个由Sqlite支持的ManagedObject: 1.)具有两个属性的User , firstname和lastname以及只读的虚拟(临时)属性fullname 。 @interface User : NSManagedObject … @property NSString *firstname; @property NSString *lastname; @property (readonly) NSString *fullname; @end @implementation User … – (NSString*)fullname { return [NSString stringWithFormat:@"%@ %@", self.firstname, self.lastname]; } @end 2.)除了几个其他属性之外,还有一个Message与一个存储在sender属性中的用户有关系。 @interface Message : NSManagedObject @property User *sender; @end 我想用特定发件人的全名来获取消息的所有实例。 这是我正在构build的NSPredicate: [NSPredicate predicateWithFormat:@"sender.fullname CONTAINS[cd] %@", @"Searched Name"]] 不幸的是,一旦我开始search,我得到一个NSInvalidArgumentException : *** […]

如何在故事板中的多个视图之间传递对象,iOS Dev

我已经search了这个,但答案太简单,无法满足我:( 我想从TabBarController传递一个NSManagedObjectContext几乎在我的应用程序中的每个视图控制器。 具体来说,我的故事板结构是这样的: TabBarController >>>几个标签项目视图(这很容易通过,只需要传入一次在视图控制器)。 但是我有另外一个关系: TabBarController (上面提到的那个)>>> NavigationController >>> TableViewControllerOne >>> TableViewControllerTwo , 现在是灾难。 因为基本上我必须将NSManagedObjectContext实例从NavigationController转移到TableViewControllerOne和TableViewControllerTwo ….这可能涉及到很多prepareSegue:sender ,这并不容易pipe理。 所以我的问题是:在iOS开发中,有没有办法可以创build一个“全局”对象,我可以在整个应用程序中轻松访问? 从使用核心数据的master-detail视图的苹果官方模板,它在应用程序委托中实例化NSManagedObjectContext ,并将其传递给主视图控制器。 如果经过多次查看,必须使用这个对象呢? 哇,这是很多代码。 希望我自己清楚,有人可以帮助:)非常感谢。