Tag: nsfetchedresults

当从Child ManagedObjectContext和Parent ManagedObjectContext保存时,CoreDataTableView不更新

我试图从一个JSON文件中填充数千个条目的CoreData。 我想要做的是创build一个新的NSManagedObjectContext的父属性设置为我的主NSManagedObjectContext。 每隔一段时间我都会保存在我的子上下文中,如果成功,则保存在我的主要上下文中。 如果这也是成功的,我尝试重新加载我的tableview。 我的CoreDataTableView设置了一个NSFetchedResultController,直接从苹果的文档。 但是,表视图不刷新。 有没有人有什么build议? #pragma mark – Setters – (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext { _managedObjectContext = managedObjectContext; if (managedObjectContext) { NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Place"]; request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"location" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]]; request.predicate = nil; //Fetch all Tags self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:@"group" cacheName:nil]; } } #pragma mark – View Lifecycle – (void)viewWillAppear:(BOOL)animated […]

NSFetchedResultsController在被pipe理对象被修改时通知它的代理删除更改,并且从不通知插入或更新

我有一个UITableViewController ,这是NSFetchedResultsController的委托。 我的NSFetchedResultsControllerDelegate函数按照Apple文档中的 “Typical Use”进行设置,并将表视图控制器作为获取的结果控制器的委托属性。 我也有一些视图控制器,这些控制器显示在可以修改被pipe理对象的表格视图之上。 这些修改是在相同的托pipe对象上下文中完成的。 在我的应用程序中只有一个托pipe对象上下文构造,并且它是全局访问的。 (我已经把一些print语句放在我的对象语境结构中,以确保我不会在别处意外重新构build它)。 当我修改其中一个托pipe对象时,委托函数controller:didChangeObject被调用,但.Delete 始终是 .Delete 。 当我创build一个托pipe对象时,委托函数根本不会触发。 但是,当我手动调用performFetch()和tableView.reloadData() ,单元格会恢复到正确的状态:删除的行返回,创build任何未插入的行。 结果是删除对象按预期工作(单元格被删除),但更新到对象会导致其单元格被删除,并且对象创build不会触发单元格插入。 我试图创build一个这种行为的简单演示,但是当我从一个空白的应用程序重新创build的情况下,我没有看到这种行为。 所以在我的应用程序中的东西是造成这种奇怪的行为,但我不知道什么。 有任何想法吗? 额外信息: 谓词和sorting描述符的实际构造是通过几个不同的类来完成的,但是通过print(resultsController.fetchRequest.predicate)和print(resultsController.fetchRequest.sortDescriptors)如下: 可选(readState ==“2”或readState ==“1”) 可选([(readState,ascending,compare :),(title,ascending,compare :)]) 我已经把一个打印语句放在我的controller:didChangeObject:方法中,而且我可以看到这只用type.rawValue = 2 (即.Delete ) .Delete ,只有当我修改对象时,而不是当我创build它们。

核心数据和表格视图

场景: 我有一个跟踪iOS应用程序的费用,我将费用从一个费用明细视图控制器存储到一个表格视图,显示费用列表以及类别和金额。 在tableview的顶部,是一个带CALENDARbutton的UIView,一个显示date的UILabel文本(例如:2012年10月23日(星期日)),另外还有2个button。 按下日历button打开一个具有当前date的自定义日历,两个button用于相应地递减和递增date。 我想根据在我的核心数据实体“费用”中属性的date来节省费用。 问题:假设我按下日历button,并从那里select一些随机date,它下面的表格视图应该显示当天的特定费用。 我的意思是我希望表格视图只显示特定的date费用,如果我按下button来增加date或减lessdate,表格视图应该显示当天的费用。 我正在使用NSFetchedResultsController和核心数据,以节省我的开支。 任何想法,我将如何实现这一目标? 这是FRC的代码。 -(NSFetchedResultsController *)fetchedResultsController { if(_fetchedResultsController != nil) { return _fetchedResultsController; } AppDelegate * applicationDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; NSManagedObjectContext * context = [applicationDelegate managedObjectContext]; NSFetchRequest * request = [[NSFetchRequest alloc]init]; [request setEntity:[NSEntityDescription entityForName:@"Money" inManagedObjectContext:context]]; NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"rowNumber" ascending:YES]; NSArray * descriptors […]

什么是导致这个核心数据输出的差异?

我有一个NSFetchedResultsController,我第一次运行我的应用程序时返回0节,但是当我closures并重新加载应用程序后,正确的节数很难。 我注意到,如果我NSLog数组[[self.fetchedResultsController fetchedObjects]描述],我得到一个稍微不同的结果之间的第一次和以后,我希望这将帮助我找出整体问题。 第一次运行: "<Contact: 0x1fc7a000> (entity: Contact; id: 0x1fc79cb0 <x-coredata:///Contact/tC060241D-2C37-4F78-AA69-5FBE3CB9DDFB364> ; data: {\n email = nil;\n emails = (\n );\n name = \"AIB Dundrum\";\n nameInitial = A;\n parseID = nil;\n phoneNumber = 012983777;\n signedUp = 0;\n})" 第二次运行: "<Contact: 0x1e35f3f0> (entity: Contact; id: 0x1e2ab020 <x-coredata://FD1A50BA-9A08-452D-B4B4-2072FA1B190C/Contact/p337> ; data: <fault>)" 任何人都可以向我解释这些输出之间的差异,为什么第二次运行应用程序时数据出现故障,我怎样才能在第一次做这些事情呢? 谢谢

我应该在持续更新关系中使用FetchedResultsController作为对象吗?

我有一个简单的Coredata模型,其中一个实体叫做“对话”,另一个是“消息”。 基本上,我需要重现iPhone的短信应用程序。 我从消息到对话有一对一的关系,从对话到消息有一对多的关系。 Conversation{ messages<–>>Message.conversation } Message{ conversation<<–>Conversation.messages } 任何时候我启动我的应用程序,我所有的谈话都加载在我的fetchedResultsController。 如果我正确理解了Coredata是如何工作的,就像我有一种关系一样,每一条链接到我的对话的消息都会被加载。 我设置了一个批处理大小,这样我就不会同时加载所有的对话。 我的应用程序通过长时间的请求连接到服务器,所以我可以随时从服务器接收消息(将添加到coredata,然后使用NSNotification来告诉我的意见附加)。 我的问题是这样的:当我select一行时,我推动另一个视图在堆栈上,以便我可以看到我的消息。 我想知道如何做到这一点,原因是: •我可以通过我的观点来看我的NSSet通过关系给出的信息,对吧? 然而,正如我可以收到一条消息,同时在看这个观点,我如何刷新传递给视图的NSSet? •我也可以在该视图中使用另一个fetchedresultController,但在这种情况下,我将无故将我所有的消息预加载到先前的视图中? 我可以告诉coredata不要加载他们在我以前的观点? 我希望这是清楚的。 我有点绝望,我知道那个网站上有一些专家。 让我知道如果你需要别的东西,我会尽快提供更多的信息。

UITableViewCellbutton标签在UISearchController中返回所需的IndexPath,而不是FetchedResultsController

我在Swift 2.0的Core Data项目的UITableView上实现了NSFetchedResultsController 。 另外,我有一个UISearchController实现。 除了我在自定义的UITableViewCellbutton上遇到的行为之外,一切都可以正常工作。 当UISearchController处于活动状态时, customTableViewCell的button按照它们应该的方式工作。 如果在fetchedResultsController显示其结果时单击相同的button,则方法认为索引0是发件人,无论我单击哪个button。 func playMP3File(sender: AnyObject) { if resultsSearchController.active { // ** THIS WORKS ** // get a hold of my song // (self.filteredSounds is an Array) let soundToPlay = self.filteredSounds[sender.tag] // grab an attribute let soundFilename = soundToPlay.soundFilename as String // feed the attribute to an initializer of […]

iOS:如何使用谓词NSexpression检查用户input的有效性和一致性

在我的应用程序使用coredata我有一个实体具有两个属性GridValue (数值), RecordingDate (NSdate))。 一个tableview中的用户可以每天input这两个值,并用一个获取控制器logging。 这里有更多的理解是关于这个问题的两个观点的截图: AddviewController是用户添加新值的地方,当用户点击静态tableview中的两个字段时,他被redirect到“Zahl Datum”视图进行编辑。 我想要做的是检查用户input的GridValue ,并显示一个警告(可能是一个警告消息,或者在这种情况下,当新input的值小于先前input的值时,将显示或popup的页脚消息在不同的日子(以前存储的RecordingDate值(来自CoreData模型的NSdateinput属性))。 示例说明当前用户是否input:Zahlerstand = 1254和Datum: 12,05,2013 ,在之前的logging中,值分别为:Zahlerstand = 1300和Datum: 11.05.2013。 那么我们就会看到,在连续的date里, 新价值比旧价值要小 。 在这种情况下,应该显示警告 (如在tableview部分页脚中,然后才能点击addviewcontroller中的“save”button。 请尽可能帮助一些示例代码。 先谢谢你,

核心date的概念:NSFetchedResultsController与NSManagedObject objectsWithFetchRequest

什么时候使用NSFetchedResultsController与NSManagedObject的objectsWithFetchRequest方法比较? 有典型的情况吗?

iOS:对NSFetchedResultsController进行sorting和分组

我有两个表结构如下 MainCategory: name position hasSubCategories 子类别: name position display belongsToMainCategory 现在我想要显示按主类别分组的所有子类别(其中显示属性= YES)。 主类别部分应按照位置和子类别(在部分内)通过其位置属性进行sorting。 (名称的方式可以是一样的主要类别…我的表具有更多的属性,但他们是不相关的了解问题)。 但我的订单完全搞砸了。 为什么? 这是我的FetchedResultsController的代码: NSError *error = nil; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SubCategory"]; NSSortDescriptor *mainCatPosition = [[NSSortDescriptor alloc] initWithKey:@"belongsToMainCategory.position" ascending:YES]; NSSortDescriptor *subCatPosition = [[NSSortDescriptor alloc] initWithKey:@"position" ascending:YES]; request.sortDescriptors = [NSArray arrayWithObjects:mainCatPosition,subCatPosition,nil]; request.predicate = [NSPredicate predicateWithFormat:@"display = %@", [NSNumber numberWithBool:YES]]; [self.db.managedObjectContext executeFetchRequest:request error:&error]; […]

NSFetchedResultsController并获得分组的权利

我有以下问题。 我有一个由NSFetchedResultsController支持的UITableview。 它应该显示让我们说一个项目,文件夹和文件。 没有比这更大的等级。 所以一个项目有几个文件夹,并有几个文件。 现在我的表格视图应该显示这些文件,按文件夹分组。 所以我认为我的提取请求的谓词只是: [NSPredicate predicateWithFormat:@"folder.project = %@", self.project]; 然后我会使用MagicalRecord来创build一个NSFetchedResultsController: [File fetchAllGroupedBy:@"folder.name" withPredicate:sectionPredicate sortedBy:@"folder.name" ascending:YES]; 这基本上与一个大问题的工作…如果文件夹中没有文件,我不会得到该文件夹​​的一部分(我需要!!!!) 所以我需要的是tableview也显示空文件夹的部分标题: Folder A File 1 File 2 Folder B Folder C File 3 我可以做到这一点没有NSFetchedResultsController,但我喜欢它处理插入/删除行和部分如此好,它观察到的变化… Thx帮忙,干杯,Georg