我使用Apple的CoreDataBooks示例应用程序作为在后台将数据拉入辅助pipe理对象上下文的基础,然后将这些数据合并到主pipe理对象上下文中。 我正在使用的数据是一个与Owner实体(称为“所有者”)具有一对一关系的Book实体。 Owner实体与Book (称为“书”)具有多对多的关系。 我的数据是一个XML格式的文档: <Owner> <Name>alexpreynolds</Name> <ID>123456</ID> </Owner> <Books> <Book>Book One</Book> <Book>Book Two</Book> … <Book>Book N</Book> </Books> Book One通过Book N与一个Owner ( "alexpreynolds, 123456" )相关联。 我将它parsing成一个Owner实例和一个由Book实例组成的NSMutableSet 。 当我第一次尝试保存时,它保存的很好,合并的数据显示在表格视图中。 然而,在第二次保存时,当XML内容包含新书时,它不起作用。 以下是发生的事情: 然后我尝试加载一个XML文档,其中包含一个尚未在主pipe理对象上下文中的Book 。 新Book使用与其他Book相关联的Owner 。 我有挑选出这个唯一的Ownerpipe理对象(我已经在我的主要pipe理对象上下文中)和主要MOC中找不到唯一的Book例程。 由此,我在二级商务部创build了一个新的Book对象,并将其“ owner ”关系设置为指向我在主要商业机构中find的唯一Owner 。 当我保存时,我得到以下错误: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Illegal attempt to establish a relationship […]
我正在iPhone应用程序中使用NSFetchedResultsController,并想知道是否有一些简单的方法来获取所有部分返回的行数。 而不是获取[[fetchedResultsController部分]计数],然后循环通过每个部分以获得其计数,可以在一行中完成? 谢谢!
这是一个错误: CoreData:错误:严重的应用程序错误。 在调用-controllerDidChangeContent:期间,NSFetchedResultsController的委托捕获到exception。 尝试使用userInfo(null)删除并重新加载相同的索引path({length = 2,path = 0 – 0}) 这是我典型的NSFetchedResultsControllerDelegate : func controllerWillChangeContent(controller: NSFetchedResultsController) { tableView.beginUpdates() } func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) { let indexSet = NSIndexSet(index: sectionIndex) switch type { case .Insert: tableView.insertSections(indexSet, withRowAnimation: .Fade) case .Delete: tableView.deleteSections(indexSet, withRowAnimation: .Fade) case .Update: fallthrough case .Move: tableView.reloadSections(indexSet, […]
我有一个用户界面来插入一个事务。 一旦用户点击一个加号,他得到的屏幕,我想实例化我的核心数据NSManagedObject实体,让用户在它上面工作。 然后当用户点击保存button,我将调用保存function。 所以下来代码: transaction = (Transaction *)[NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:self.managedObjectContext]; //even if i dont call save: its going to show up on my table [self.managedObjectContext save:&error] PS我在该表上使用NSFetchedResultsController,我看到NSFetchedResultsController插入一个节和一个对象的表。 我的想法是,如果有一种方法来实例化事务NSManagedObject我可以更新与保存,直到客户端select。
我使用NSFetchedResultsController来显示一堆对象,这些对象使用date进行分区。 在全新的安装中,这一切都完美地工作,对象显示在表视图中。 但是,似乎应用程序重新启动时,我得到一个崩溃。 我在初始化NSFetchedResultsController的时候指定了一个caching,当我没有完美的工作的时候。 这里是我如何创build我的NSFetchedResultsController: – (NSFetchedResultsController *)results { // If we are not nil, stop here if (results != nil) return results; // Create the fetch request, entity and sort descriptors NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext]; NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"utc_start" ascending:YES]; NSArray *descriptors = [[NSArray […]
我有一个NSDate属性的核心数据模型。 我想白天过滤数据库。 我认为解决scheme将涉及NSPredicate ,但我不知道如何把它放在一起。 我知道如何使用NSDateComponents和NSCalendar来比较两个NSDate的NSCalendar ,但是如何使用NSCalendar进行过滤? 也许我需要在我的NSManagedObject子类上创build一个类别,它可以返回只有年份,月份和date的NSManagedObjectdate。 然后我可以比较一下NSPredicate 。 这是你的build议,还是有更简单的?
我正在尝试使用具有混合语言数据的FRC,并希望有一个段索引。 从文档看来,您应该能够覆盖FRC – (NSString *)sectionIndexTitleForSectionName:(NSString *)sectionName – (NSArray *)sectionIndexTitles 然后使用UILocalizedIndexedCollation来获得本地化的索引和部分。 但可悲的是,这是行不通的,不是什么打算使用:( 有没有人能够使用UILocalizedIndexedCollation FRC或我们被迫使用示例UITableView + UILocalizedIndexedCollation示例中提到的手动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 […]
比方说,我有两个实体,员工和部门。 一个部门与员工有多对多的关系,许多员工可能在每个部门,但每个员工只属于一个部门。 我想使用NSFetchedResultsController来显示所有员工在一个tableview中按照他们所属部门的属性sorting的数据。 问题是,我希望我的表更新部门对象收到更改时,就像它的职员的常规属性更改,但FetchedResultsController似乎不跟踪相关的对象。 我已经部分通过了这个问题,做了以下几点: for (Employee* employee in department.employees) { [employee willChangeValueForKey:@"dept"]; } /* Make Changes to department object */ for (Employee* employee in department.employees) { [employee didChangeValueForKey:@"dept"]; } 这显然是不理想的,但它确实导致基于员工的FRC委托方法didChangeObject被调用。 我现在留下的真正问题是在对正在跟踪员工对象的FRC进行sorting: NSEntityDescription *employee = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:self.managedObjectContext]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"department.someProperty" ascending:NO]; 这个工作很好,第一次被调用的时候正确地对员工进行sorting,问题是当我改变一个部门的某些属性时,应该改变我的员工表的sorting。 有什么好办法让我的员工FRC跟踪关系的变化? 特别是我只是需要一些方法来更新sorting时,sorting是基于相关的属性。 我已经看了一些类似的问题,但无法find一个令人满意的解决scheme。
我使用NSFetchedResultsController呈现表视图内容,它有一个谓词: [NSPredicate predicateWithFormat:@"visible == %@", [NSNumber numberWithBool:YES]] 在使用单独NSManagedObjectContext后台线程上,我更新了一些实体,并将其visible值从NO更改为YES 。 保存,合并主线程的NSManagedObjectContext更改。 但fetchedObjects不会改变。 另外控制器不会在-controller:didChangeObject:…上调用-controller:didChangeObject:… 如果实体在主线程上以相同的方式更新(我的testing应用程序调用相同的方法),一切都按预期工作。 另外通知的NSUpdatedObjectsKey包含这些对象。 目前唯一的解决scheme是find每个NSUpdatedObjectsKey实体: NSManagedObjectContext *context = … // main thread context [context existingObjectWithID:[object objectID] error:nil] 此问题仅适用于以前与谓词不匹配的更新对象。 我错过了什么明显的?