Tag: 核心数据

核心数据:儿童上下文是否获得新插入对象的永久对象ID?

我有一个应用程序与两个pipe理对象上下文设置像这样: 父上下文:链接到持久性存储的NSPrivateQueueConcurrencyType。 主要上下文:NSMainQueueConcurrencyType,父上下文的子项。 当插入一个新的托pipe对象到主要的上下文,我保存主要的上下文,然后像这样的父上下文: [context performBlockAndWait:^{ NSError * error = nil; if (![context save: &error]) { NSLog(@"Core Data save error %@, %@", error, [error userInfo]); } }]; [parentContext performBlock:^{ NSError *error = nil; BOOL result = [parentContext save: &error]; if ( ! result ) { NSLog( @"Core Data save error in parent context %@, %@", […]

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

我的核心数据在我的应用程序中工作。 所以,我获取一个XML文件,将数据parsing成模型对象并将其插入到核心数据中。 他们被保存在持久存储中,当我重新启动应用程序时,我可以访问它们。 但是,我希望能够随意刷新持久存储中的数据,因此我需要先从存储中删除现有的对象。 有没有一个简单的方法呢? 谢谢 我发现这个解决scheme: [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];

如何为核心数据中的某些字段添加唯一约束

我是iOS开发的新手,我使用XCode 5.02进行开发。 我有一些实体(例如,用户),我需要为他的名字设置唯一的约束,但我无法通过可视化编辑器find我可以做到的。 是否可以通过GUI来完成? 或者只能通过代码? 感谢提前。 如果有可能我会很高兴得到一些截图。

将图像存储在Core Data或文件中?

我也有一套包含图像的数据。 我想要caching这些数据。 我应该将它们存储在文件系统还是核心数据上?为什么?

我应该在哪里保存我想长期保存的数据和文件,以及如何防止iCloud将其备份

我有任意types的文件 – 包括核心数据存储库 – 我需要保留,而不是iOS删除它们。 通常,我不希望iCloud将这些文件备份。 我应该在哪里救他们?

正确实现父/子NSManagedObjectContext

我的应用程序有时会将对象插入托pipe对象上下文中,而这些对象并不一定要保存。 例如,当我启动“添加实体”模式时,我创build一个托pipe对象并将其分配给模式。 如果用户保存该模式,我保存上下文。 如果他取消,我删除对象,不需要保存。 我现在介绍了一个“导入”function,切换到我的应用程序(使用URLscheme),并添加一个实体。 因为这些模式中的一个可能是开放的,所以在这一点上保存上下文是不安全的。 为模式创build的临时对象将被保存,即使用户取消,也不能保证删除(从取消操作)将被保存 – 用户可能会退出该应用程序。 同样,我不能简单地保存每当我的应用程序退出。 如果模态在此时打开,临时对象将被错误地保存。 为了解决这个问题,我正在试图使用一个子的上下文,正如这里所讨论的。 读完所有我能find的,我有几个问题: 我应该为每个上下文使用哪种并发types? 请记住,我没有这样做的性能/线程的好处。 我知道我不能使用NSConfinementConcurrencyType的主要上下文,如果它有子上下文,但我不知道哪两个选项是最适合的。 对于儿童情况,它是否需要匹配? 或者我甚至可以在这里使用限制types? 我已经尝试了各种组合,都似乎工作正常,但我想知道哪些是适合我的要求。 (侧面问题)为什么我只能使用这个工作,如果我使用一个类的iVar? 我认为我应该能够在创build它的方法中声明临时上下文,然后使用entity.managedObjectContext引用它。 但是,当我来访问它似乎是零? 如果我使用一个iVar来保存参考,这是纠正。 什么是正确的方式或传播到主要背景的变化? 我已经看到在每个上下文中使用不同的块封装实现的各种注释。 它取决于我的并发types? 我目前的版本是: //save the new entity in the temporary context NSError *error = nil; if (![myObject.managedObjectContext save:&error]) {NSLog(@"Error – unable to save new object in its (temporary) context");} //propogate the […]

iPhone核心数据“自动轻量级迁移”

我正在尝试更新一个实现核心数据存储的应用程序。 我正在为其中一个实体添加一个属性。 我将下面的代码添加到我的委托类: – (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator != nil) { return persistentStoreCoordinator; } NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Shoppee.sqlite"]]; NSError *error = nil; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { NSLog(@"Error: […]

如何在今天的扩展(iOS)中访问CoreData模型

是否有可能像在原来的应用程序一样快速扩展中使用我的CoreData模型? 如果是的话,我如何创buildNSManagedObjectContext? 我真的没有线索,除了组标识符,但不幸的是我不知道如何获得上下文.. 在过去,我创build的应用程序开始时,我想使用CoreData的检查,然后我通过我的AppDelegate managedObjectContext ..但我怎么能做一个这样的扩展在这样的思考? 苹果公司不提供有关的信息.. 我在AppDelegate中编辑了这一行: NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"HTWcampus.sqlite"]; 到这个(包括组到两个目标之后): NSURL *storeURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.BenchR.TodayExtensionSharingDefaults"]; storeURL = [storeURL URLByAppendingPathComponent:@"HTWcampus.sqlite"]; NSLog(@"StoreURL2: %@", storeURL); 由于我的应用程序中现有的数据库已经不存在了(这是好事,因为我认为它把数据库放在共享段中)。 但是我怎样才能在扩展中创build我的上下文的实例? 我怎样才能访问我的NSManagedObject子类? 在扩展中,我有这个代码到目前为止: var context: NSManagedObjectContext! override func viewDidLoad() { super.viewDidLoad() var storeURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.BenchR.TodayExtensionSharingDefaults") storeURL = storeURL?.URLByAppendingPathComponent("HTWcampus.sqlite") let modelURL = NSBundle.mainBundle().URLForResource("HTWcampus", withExtension: "momd") let model […]

'+ entityForName:nil不是合法的NSManagedObjectContext参数 – 核心数据

我已经将所有相关代码添加到App Delegate中,并且可以将其添加到数据模型中,并从applicationDidFinishLaunchingWithOptions中的数据模型中获取。 我的问题是当我试图写入我的视图控制器中的数据模型。 我已经将这个代码添加到头文件中: NSFetchedResultsController *fetchedResultsController; NSManagedObjectContext *managedObjectContext; @property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController; @property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 而这个代码给我的实现文件: NSManagedObjectContext *context = [self managedObjectContext]; NSManagedObject *model = [NSEntityDescription insertNewObjectForEntityForName:@"Events" inManagedObjectContext:context]; [model setValue:@"Sample Event" forKey:@"eventName"]; NSError *error; if (![context save:&error]) { NSLog(@"Couldn't save: %@", [error localizedDescription]); } 但是,我得到以下错误: 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal […]

NSFetchedResultsController与UILocalizedIndexedCollat​​ion

我正在尝试使用混合语言数据的FRC,并希望有一个部分索引。 从文档看来,您应该能够覆盖FRC – (NSString *)sectionIndexTitleForSectionName:(NSString *)sectionName – (NSArray *)sectionIndexTitles 然后使用UILocalizedIndexedCollat​​ion来获得本地化的索引和部分。 但可悲的是,这是行不通的,不是什么打算使用:( 有没有人能够使用UILocalizedIndexedCollat​​ion FRC或我们被迫使用示例UITableView + UILocalizedIndexedCollat​​ion示例中提到的手动sorting方法(示例代码包括我得到这个工作)。 使用以下属性 @property (nonatomic, assign) UILocalizedIndexedCollation *collation; @property (nonatomic, assign) NSMutableArray *collatedSections; 和代码: – (UILocalizedIndexedCollation *)collation { if(collation == nil) { collation = [UILocalizedIndexedCollation currentCollation]; } return collation; } – (NSArray *)collatedSections { if(_collatedSections == nil) { int sectionTitlesCount = [[self.collation […]