问题标签 [nsfetchedresultscontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - iPhone联系人应用程序样式的索引表视图实现
我的要求: 我有这个直截了当的要求,即在索引表视图中按字母顺序列出人员姓名,索引标题是字母的起始字母(另外还有顶部的搜索图标和 # 以显示以数字开头的杂项值和其他特殊字符)。
到目前为止我所做的: 1. 我正在使用核心数据进行存储,并且“last_name”被建模为联系人实体中的字符串属性 2.我正在使用 NSFetchedResultsController 来显示已排序的索引表视图。
完成我的要求的问题: 1. 首先,我无法让章节索引标题成为字母的第一个字母。戴夫在以下帖子中的建议帮助我实现了同样的目标:NSFetchedResultsController with section created by the first letter of a string
我在 Dave 的建议中遇到的唯一问题是我无法将 misc 命名为分组在“#”索引下。
我尝试过: 1. 我尝试向 NSString(类别)添加自定义比较方法以检查比较和部分是如何进行的,但是在 NSSortDescriptor 选择器中指定时不会调用该自定义方法。
这是一些代码:
获取数据的代码:
您能否让我知道我缺少什么以及如何完成要求?
iphone - iPhone:获取结果控制器,不要使用 UITableView 中的部分
我正在使用一个获取的结果控制器,它似乎想要使用我的 UITableView 中的部分进行设置。好吧,在这种情况下,我不想使用部分。其中,将 numberOfSectionsInTableView: 的值设置为 1 很容易。但是,现在我不确定如何获取 numberOfRowsInSection: 以将所有单元格返回到一个部分中。
我怎样才能使该方法返回所有单元格,因为我只想使用 1 个部分?
iphone - NSManagedObjectContext 是自动保存的还是我在查看 NSFetchedResultsController 的缓存?
我正在开发一个 iPhone 应用程序,我在主表视图控制器中使用 NSFetchedResultsController。我在主表视图控制器的 viewDidload 中这样创建它:
然后,在后续视图中,我在上下文中创建了一个新对象:
TestObject 有几个相关的对象,我以相同的方式创建并使用提供的 add...Objects 方法添加到 testObject 中。
然后,如果在保存上下文之前,我按下取消并返回主表视图,则没有按预期显示。但是,如果我重新启动应用程序,我在上下文中创建的对象会显示在主表视图中。怎么会?起初,我认为这是因为 NSFetchedResultsController 正在从缓存中读取,但正如您所见,我将其设置为 nil 只是为了进行测试。此外,[context hasChanges] 在我重新启动后返回 true。我在这里想念什么?
iphone - 使用 NSFetchedResultsController 处理后台更改
我在使用 NSFetchedResultsController 和 CoreData 时遇到了一些烦人的问题,如果能得到帮助,我将非常感激。
问题 1 - 更新:我在后台线程上更新我的商店,这导致某些行被删除、插入或更新。使用“mergeChangesFromContextDidSaveNotification:”方法将更改合并到主线程上的上下文中。插入和删除会正确更新,但更新不会(例如,单元格标签不会随着更改而更新),尽管我已经确认更新来自 contextDidSaveNotifcation,就像插入和删除一样。我目前的解决方法是将上下文的陈旧间隔临时更改为 0,但这似乎不是理想的解决方案。
问题 2 - 删除对象:我的 fetch 批量大小为 20。如果前 20 行中的后台线程删除了一个对象,则一切正常。但是如果对象在前 20 行之后并且表格向下滚动,则会引发“CoreData 无法完成错误”错误。我尝试重新保存上下文并重新执行 frc 提取 - 一切都无济于事。注意:在这种情况下,不调用 frc 委托方法“didChangeObject ....”进行删除 - 我认为这是因为当时有问题的对象没有出错(因为它超出了初始提取范围)。但是由于某种原因,上下文仍然认为该对象在附近,尽管它已从存储中删除。
问题 3 - 删除部分:当删除一行导致删除部分时,我得到“部分中的行数无效???” 错误。我已经通过从 NSFetchedResultsChangeMove: 部分中删除“reloadSection”行并将其替换为“[tableView insertRowsAtIndexPaths ....”来解决此问题,这似乎可行,但我再次不确定这是否是最佳解决方案。
任何帮助将不胜感激。谢谢!
iphone - NSFetchedResultsController 不处理某些部分驱动的移动
我使用带有核心数据存储的 NSFetchedResultsController (frc)。我实现了所有的 frc 委托方法。该表由后台线程偶尔更新。所有的插入、删除和更新工作都很好,除了更新到表底部的行(50 行)的 frc 的索引键,不会导致节移动。例如,如果“name”是索引键并且名称“Victor”更改为“Alex”,则 victor 行现在显示名称 Alex,但不会与所有其他以 A 开头的名称一起移动到表的顶部。我注意到,这仅适用于表格底部的行。如果将像“Andy”这样的行更改为“Ben”,则移动确实被 frc 正确处理。任何解决此问题的建议将不胜感激。我不使用 frc 缓存。谢谢
iphone - 向 UITableView 添加行时显示移位
我有一个显示底层 NSFetchedResultsController 的 UITableView。
当 fetchedResultsController 更新时,
叫做。并执行以下操作:
只为新行调用 cellForRowAtIndexPath(这是合乎逻辑的)
然而,问题是表格视图的行中显示的所有值都被向下移动。第一行显示其标题。第二行显示第一行的标题。第三行第二行的标题等。如果我重复一遍,第三行将显示第二行的标题,第四行将显示第三行的标题等。
我不明白会发生什么,特别是因为 cellForRowAtIndexPath 只为新行调用(这是合乎逻辑的)而不是所有这些行。此外,如果我单击这些标题错误的行,它会打开正确的文档(didSelectRowAtIndexPath 与 indexPath 一起正常工作)
有什么可能发生的线索吗?谢谢!
iphone - 在没有 UITableViewController 的情况下使用 NSFetchedResultsController 有意义吗?它们有什么关系?
我的意思是......我是否也可以创建一个普通的旧 UIViewController,然后自己设置一个 UITableView,再加上一个 NSFetchedResultsController?
UITableViewController 和 NSFetchedResultsController 交互多少?据我所知, UITableViewController 默认情况下并未采用 NSFetchedResultsControllerDelegate 协议。几乎看起来 UITableViewController 是在不知道 NSFetchedResultsController 的情况下开发的。可能他们甚至在开发 FRC 之前就这样做了。无论如何,这只是一个粗略的猜测,因为 UITableViewController 根本没有提到 FRC。
所以我在 UITableViewController 中看到的唯一一件事是它已经是通过采用协议的 UITableView 的委托,它为我设置了 UITableView 实例并在内部将它分配给它的 tableView 属性。这就是 UITableViewController 的全部魔力吗?
(注意:nsfetchedresultscontrolle 标签不是错字。所以对字符数有限制......对于缺少的 r 来说太糟糕了,这就是为什么我在其他问题(如瘟疫)中避免使用这个标签的原因)
iphone - 动态更改获取结果控制器的排序描述符
有没有办法为 iOS 上的获取结果控制器动态设置排序描述符?
例如,我需要根据导航标题栏中分段控件的设置对返回给我的核心数据结果进行排序。用户可以单击分段控件以按价格或优先级排序。
然后,我需要获取的结果控制器返回并显示核心数据信息,这些信息根据该分段控制值分类为多个部分。
我最初知道如何设置排序描述符,但我不确定如何动态更改/更新它。由于该- (NSFetchedResultsController *)fetchedResultsController
函数是延迟加载的,它是否总是只返回第一次创建的 frc(从而返回初始排序描述符设置)?
我是否会做一些事情,比如将分段控件值存储在 sharedPreferences 中,然后当它被更改时,将我的 fetchedResultsController 设置为 nil 以便生成一个新的?然后在 fetchedResultsController 函数中,我可以根据 sharedPreferences 设置创建我的 sortDescriptor 吗?
iphone - 如何刷新 UITableViewController 或 NSFetchedResultsController?
我的 UITableViewController 或 NSFetchedResultsController 有一点问题。我不确定哪个是问题,但我猜它是 UITableViewController。
正如我所说,我使用 NSFetchedResultsController 将数据填充到 UITableViewController 中。数据按日期排序,也按日期-年份分段显示,例如 2010 年 5 月/2010 年 6 月/等。这显示为节标题。
现在,当我添加新数据时,它会自动使用当前日期作为默认日期,但如果我想使用当前不在部分列表中的日期,例如 2010 年 4 月(列表中当前为 5 月和 6 月),那么这是未正确显示。只有当我退出应用程序并重新启动它时,它才会显示新的部分标题,一切都很好。
所以我不知何故需要能够刷新我的列表或更新它。只是将它添加到上下文并更改它似乎并没有更新它。
同样,我不确定我需要更新什么,是我的 NSFetchedResultsController 对象还是 UITableViewController。
更新#1:
我只是认为这种方法有一个例外:
这是我移动数据的地方:
此方法几乎取自 Apple 的 CoreDataBooks 示例。这是错误:
严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了一个异常。*** -[NSMutableArray removeObjectAtIndex:]: 索引 1 超出范围 [0 .. 0] 与 userInfo (null)
之后,编辑模式(出现删除按钮的位置)不再起作用。
谢谢。
iphone - EXC_BAD_ACCESS NSArray of ManagedObjects(核心数据)
我的 iPhone 应用程序发生了一些奇怪的事情。我正在使用 Core Data 将数据存储在 SQLite 数据库中。我的应用程序启动后第一次尝试读取一个表以返回所有行以填充 UITableView,其中包含供用户选择的内容列表。如果他们选择了列表中的顶部项目,我会得到一个 EXC_BAD_ACCESS 异常。如果他们选择任何其他项目,一切似乎都很好。这是代码示例: Sport 和 Team 是 NSManagedObjects。sports 是使用 NSFetchedResultsController (fetchedObjects) 获取的 Sport 对象的 NSArray。我可以在 UITableView 中很好地显示对象列表(我对 cellForRowAtIndexPath() 调用使用相同的数组,没有任何问题
更新:它似乎只影响 NSArray 中的最后一条记录而不是第一条记录,直到它抛出 EXC_BAD_ACCESS 错误。在我再次重新启动应用程序后,问题消失了,代码按预期工作:(