Tag: nsfetchedresultscontroller

NSSortDescriptor与任意sorting

我无法将自己的头围绕如何使用NSSortDescriptor进行任意sorting。 我想要做这样的事情: NSArray *sortAlgorithm = [NSArray arrayWithObjects:@"@", @"#", @"!", @"&", @"r", @"a", nil]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES comparator: ^(id obj1, id obj2) { NSComparisonResult comparisonResult; //Some code that uses sortAlgorithm. return comparisonResult; } ]; 这将通过键name对对象进行sorting,以便任何以@开始的键(例如@home )将出现在任何以r开头的键之前(例如radical ,并且再次以任何以a开头的键。 以上只是一个例子。 关键是要启用完全的任意sorting。 这将用于NSFetchedResultsController。 什么代码//使用sortAlgorithm的一些代码看起来像? 编辑: 代码围绕我尝试实现sortDescriptor,作为公关。 occulus'build议: – (NSFetchedResultsController *)fetchedResultsController { if (__fetchedResultsController) return __fetchedResultsController; […]

NSFetchedResultsChangeUpdate而不是NSFetchedResultsChangeDelete

我有一个NSFetchedResultsController以下列方式启动: NSEntityDescription *myEntity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; [fetchRequest setEntity:myEntity]; [fetchRequest setFetchBatchSize:10]; [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]]; NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor, nil]]; myFetchedResults = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil]; myFetchedResults.delegate = self; [myFetchedResults performFetch:nil]; 一些事实: wasDeleted是MyEntity的一个NSNumber属性(BOOL) 如果我更新此属性[NSNumber numberWithBool:YES] NSFetchedResultsControllerDelegate调用didChangeObject但触发NSFetchedResultsChangeUpdate而不是NSFetchedResultsChangeDelete 。 然而,如果我popup视图,并再次获取结果控制器,该对象不存在了,显示[fetchRequest […]

UIManagedDocument NSFetchedResultsController和背景上下文

我正在尝试以下工作。 我有一个表格视图,显示从表格视图中的API获取的数据。 为此,我正在使用NSFetchedResultsController: self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.database.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 我在像这样的后台上下文中创build我的实体: NSManagedObjectContext *backgroundContext; backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; backgroundContext.parentContext = document.managedObjectContext; [backgroundContext performBlock:^{ [MyAPI createEntitiesInContext:backgroundContext]; NSError *error = nil; [backgroundContext save:&error]; if (error) NSLog(@"error: %@",error.localizedDescription); [document.managedObjectContext performBlock:^{ [document updateChangeCount:UIDocumentChangeDone]; [document.managedObjectContext save:nil]; }]; 现在,每当我得到新的数据(和插入/更新如上所示的实体),我的NSFetchedResultsController并不像它应该那样工作。 特别是,我总是更新一个实体(而不是创build一个新实体),但我的表视图显示两个实体。 一旦我重新启动应用程序,它显示正确。 如果我在self.database.managedObjectContext中创build实体([MyAPI createEntities]),一切正常。 任何想法我做错了什么? 通过这里的现有线索来看看,让我觉得我正在做正确的方式。 再次,如果我不做核心数据保存在背景上下文(但在document.managedObjectContext),那么它工作正常…

UICollectionView与多个子类UICollectionViewCell

我有我的UICollectionView按“datasetType”分组的多个部分。 我也有每个部分的自定义UICollectionViewCell。 我如何确定在cellForItemAtIndexPath方法中需要哪个自定义的cellForItemAtIndexPath ? 我的第一个虽然是基于[sectionInfo name] : id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:indexPath.section]; if ([[sectionInfo name] isEqualToString:@"DatasetA"]) { DatasetACell *datasetACell = [collectionView dequeueReusableCellWithReuseIdentifier:datasetACellIdentifer forIndexPath:indexPath]; DatasetA *datasetA = [self.fetchedResultsController objectAtIndexPath:indexPath]; } 但我遇到了一个问题,试图加载错误的数据集单元格。 如果这个工作,我需要看看其他地方的错误? 还是我做这个部分是错的? 编辑: 我有什么应该工作。 问题是索引不排队。 对于我的fetchedResultsController,我创build它为: _fetchedResultsController = [Dataset MR_fetchAllSortedBy:NAME ascending:TRUE withPredicate:predicate groupBy:@"datasetType" delegate:self.fetchedResultsController.delegate inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; 这会提取它们并按名称sorting。 我在项目中使用魔法logging,并使用其获取控制器,因为我无法让核心数据获取控制器工作: NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; […]

使用fetchedResultController删除表视图中的行

在swype删除(这种方法的最重要的行): – (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { Table *deleteRow = [self.fetchedResultsController objectAtIndexPath:indexPath]; [self.managedObjectContext deleteObject:deleteRow]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } } 当删除行时,我得到这个错误: 由于未捕获exception“NSInternalInconsistencyException”而终止应用程序,原因是:“无效更新:第2节中的行数无效。 更新(1)之后,现有节中包含的行数必须等于更新前(1)节中包含的行数加上或减去从该节插入或删除的行数(插入0 ,1删除),加上或减去移入或移出该部分的行数(移入0,移出0)。 如果我注释的最后一行代码( [tableView deleteRowsAtIndexPaths:…] )一切工作正常(但我必须刷新视图,看看那行被删除)。 如何正确地做到..? 编辑:考虑@Kyr Dunenkoff响应我补充说: – (void)controller:(NSFetchedResultsController*)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath*)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath*)newIndexPath { UITableView *tableV = [self tableView]; switch(type) { case NSFetchedResultsChangeDelete: [tableV deleteRowsAtIndexPaths:[NSArray […]

如何跳到detailview中的下一行

我有一个TableView加载在didSelectRow detailview。 我对这些数据没有任何问题。 我正在使用coreData和填充TableView我使用NSFetchedResultsController。 现在,我想在detailView中创build下一个和上一个函数, 以跳转到下一个或上一个表(行)元素 。 下一个上一个像在邮件应用程序。 我知道我必须使用IBAction的button。 但是,我怎样才能使这个function? 谢谢, brush51 编辑1:我已经这样做了: – (IBAction) previousCard:(id) sender { NSLog(@"previousBtn"); DashboardViewController *parent = (DashboardViewController *)self.parentViewController; NSIndexPath *actualIndexPath = selectedRow2; NSIndexPath * newIndexPath = [NSIndexPath indexPathForRow:actualIndexPath.row-1 inSection:actualIndexPath.section]; NSLog(@"newIndexPath: %@", newIndexPath); [parent.tableViews selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle]; //HERE I GET SIGABRT } 但是我得到一个错误: -[UIViewController tableViews]: unrecognized selector sent to instance […]

核心数据:索引x处的提取对象的乱序部分名称为'xxxxxx'。 对象必须按节名称sorting

我知道我不是第一个问这个问题,但我真的很难过 基本上我有一个两个button的屏幕。 每个button都根据date将数据加载到下面的tableview中。 在第一个tableview的第一个加载(默认情况下select左边的button),一切都显示正常。 如果我点击右键,我得到一个空白的桌面,我得到的错误 在索引x处获取的对象的乱序部分名称为“xxxxxx”。 对象必须按节名称sorting。 切换回左侧的表格视图,数据不见了。 这两个表都是空的。 每个tableview有2个部分取决于项目的开始时间。 如果我消除部分数据显示正常。 不幸的是我需要他们..数据分为两部分,如下所示: @interface NSString(agendaSessionKeyPath) @property (nonatomic, readonly) NSString *sessionSection; @end @implementation NSString(agendaSessionKeyPath) – (NSString *)sessionSection { int timeValue = [[self stringByReplacingOccurrencesOfString:@":" withString:@""] intValue]; //turns 11:00 to 1100 if (timeValue < 1200) return @"Morning"; else return @"Afternoon"; } 获取请求 – (void)viewDidLoad { //other viewDidLoad stuff [self […]

iOS的崩溃'NSInternalInconsistencyException',原因:'语句仍然是'核心数据caching相关?

偶尔会在使用NSFetchedResultsController屏幕上看到这些崩溃报告,而不知道如何解决这些问题。 我不相信我在任何地方使用线程,除非NSFetchedResults在内部使用它们。 'NSInternalInconsistencyException',原因:'语句仍然活跃'是我得到的完整解释。 最近的两个堆栈跟踪: 0 CoreFoundation 0x37a368bf __exceptionPreprocess + 163 1 libobjc.A.dylib 0x3151c1e5 objc_exception_throw + 33 2 CoreData 0x340b2ea5 -[NSSQLiteStatement cachedSQLiteStatement] + 1 3 CoreData 0x340b274f -[NSSQLiteConnection prepareSQLStatement:] + 55 4 CoreData 0x34156049 -[NSSQLChannel selectRowsWithCachedStatement:] + 61 5 CoreData 0x34181d63 newFetchedRowsForFetchPlan_MT + 783 6 CoreData 0x340bab07 -[NSSQLCore newRowsForFetchPlan:] + 351 7 CoreData 0x34160011 -[NSSQLCore fetchRowForObjectID:] […]

带两个NSFetchedResultsController实例的TableView

经过几天的研究和重新编码,我几乎陷入了困境。 我的目标是从两个单独的fetchedResultControllers中获取一个运行testing应用程序的单个tableview。 我在购物清单上有一系列物品,每个物品都有一个部门和一个布尔“收集”标志。 未收集的项目应按部门列出,然后是包含所有收集项目(不pipe部门)的单一部分。 当用户检查未收集的项目时,他们应该下移到“收集”部分。 如果他/她没有检查收集到的物品,应该回到正确的部门。 为了实现第一部分(未收集的项目),我build立了一个简单的fetchedResultsController,用于获取所有收集= NO的项目,并按部门对结果进行分段: – (NSFetchedResultsController *)firstFRC { // Set up the fetched results controller if needed. if (firstFRC == nil) { // Create the fetch request for the entity. NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; // fetch items NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]; [fetchRequest setEntity:entity]; // only if uncollected […]

NSPredicate:取一种

我想为NSFetchRequest的对象创build一个NSFetchRequest : Object是具有attribute color Car 。 我有四辆车: car1.color = red car2.color = red car3.color = blue car4.color = green 我想创build一个NSPredicate ,为每种颜色只select一辆车(它select哪辆车并不重要。 我怎样才能做到这一点? 事实上,我正在寻找类似于SQL中的DISTINCT东西