问题标签 [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 - NSFetchedResultsController titleForHeaderInSection 带有格式化的 NSDate
在我的核心数据应用程序中,我使用的是 FetchedResultsController。通常要为 UITableView 中的标题设置标题,您将实现以下方法,如下所示:
其中 [sectionInfo name] 返回一个 NSString。
我的 sectionKeyPath 基于 NSDate,除了它给我的部分标题是原始日期描述字符串(例如 12/12/2009 12:32:32 +0100)之外,这一切都很好,看起来有点乱头!
因此,我想在此使用日期格式化程序来制作一个不错的标题,例如“2010 年 4 月 17 日”,但我不能使用 [sectionInfo name] 来做到这一点,因为这是 NSString!有任何想法吗?
非常感谢
objective-c - 按用户位置排序 NSFetchedResultsController 结果
我有一个应用程序,其中包含核心数据中的一些位置,我想按照与用户位置的接近顺序向用户显示它们。我正在使用 NSFetchedResultsController 将位置提供给表视图。我考虑过创建一个虚拟访问器方法,该方法返回位置与用户的距离,该方法将使用“全局”CoreLocationManager 计算,但它崩溃的原因是:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'keypath distanceFromCurrentLocation not found in entity < NSSQLEntity Location id=4>'
我还为用户提供了按字母顺序排序的选项,因此如果可能的话,如果我保留 NSFetchedResultsController,我会更喜欢它。
我该怎么做?
谢谢!
iphone - 如何处理与 NSFetchedResultsController 的多对多关系?
好的,所以我的数据模型中有两个实体(比如说 entityA 和 entityB),这两个实体彼此之间存在一对多关系。
我已经设置了一个 NSFetchedResultsController 来获取一堆 entityA。现在我试图让 tableview 的部分名称成为 entityB 的标题。
现在这会导致一个问题,从该关系返回的部分名称似乎是 ({title1}) 或 ({title1,title2...titleN}) 显然取决于涉及多少不同的 entityB。这在表格视图中看起来不太好,并且没有按照我的意愿对对象进行分组。
我想要的是每个 entityB 标题的一个部分,entityA 出现在每个部分下,如有必要,可以在多个部分下。我不知道我应该如何实现这一点,是否需要更新谓词以使实体多次出现,或者我是否需要更新节和标题函数以在控制器循环时进行一些处理对象。
任何帮助表示赞赏:)
谢谢
iphone - NSFetchedResultsController 在 performFetch 上崩溃:使用缓存时
我使用 NSFetchedResultsController 来显示一堆对象,这些对象是使用日期划分的。在全新安装时,一切正常,对象显示在表格视图中。但是,似乎当应用程序重新启动时我遇到了崩溃。我在初始化 NSFetchedResultsController 时指定了一个缓存,而当我不这样做时,它可以正常工作。
以下是我创建 NSFetchedResultsController 的方法:
这些是我在应用程序崩溃时收到的消息:
我真的不知道它为什么这么说,因为我不相信我正在做任何会导致这种情况的特殊行为。唯一的潜在问题是节标题(天),我在创建新对象时这样构造:
就像我提到的,如果不涉及缓存,所有这些都可以正常工作。任何帮助表示赞赏!
iphone - NSFetchedResultsController 没有返回数据
我陷入了一些问题,经过 2 天的寻找,我找到了解决方案,但不知道为什么它会起作用。
首先,我使用以下代码初始化 NSFetchedResultsController(它看起来像很多自动生成的):
}
看一下注释字符串 - 没有任何这些字符串,当我要求数据时 - 我没有得到任何数据(它就在那里!)。当我取消注释该行时,它开始工作。似乎很明显,但我之前看到的所有例子都没有那条线。他们工作。怎么可能?我只是想知道我做错了什么。
core-data - 在 ViewController 之间传递数据与在每个 VC 中进行本地 Fetch
我正在使用 Core Data 开发一个 iPhone 应用程序,我正在寻找一些关于在 ViewControllers 之间传递数据与在导航到每个 ViewController 时进行本地获取是否可以接受的一般性建议和建议。通常我会说这完全取决于各种因素(例如性能等),但是传递数据的方法在我的应用程序中非常普遍,我被所有关于苹果拒绝应用程序的故事吓坏了,因为不符合他们的标准指南。
所以让我换一种方式——在 VC 之间传递数据是不标准的吗?
我传递数据这么多的原因是因为每个 ViewController 只是我的对象模型/图形中存在的数据的另一个视图。一旦我在第一个视图控制器中处理了我的第一个对象(我当然必须获取它),我可以使用现有的对象组合/关系深入到数据的下一个细节级别,所以我只是通过这些对象到下一个VC。
另外,这种将数据传递给每个 VC 方法的一个可能的缺点是我没有受益于(我认为是)NSFetchedResultsController 在有效内存使用和部分处理方面提供的优化/好处。我的应用程序是只读的,但我确实有一个包含 5000 行的表,我很好奇我是否错过了 NSFetchedResultsController 的好处。对此也有任何想法吗?我是否仍然可以从 NSFetchedResultsController 的优点中受益而不必进行完整的提取(因为我已经从以前的 VC 中传递了数据)?
非常感谢。
iphone - NSFetchedResultsController 部分本地化排序
如何使用 NSFetchedResultsController 和翻译的排序键和 sectionKeyPath?
问题:我在数据库中的属性“类型”中有 ID,例如 typeA、typeB、typeC ......而不是直接的值,因为它应该被本地化。在英语中 typeA=Bird, typeB=Cat, typeC=Dog 在德语中是 Vogel, Katze, Hund。
使用带有排序键和“类型”上的 sectionKeyPath 的 NSFetchedResultController 我收到订单和部分 - typeA - typeB - typeC
接下来我翻译显示,一切都很好用英语: - 鸟 - 猫 - 狗
现在我切换到德语并收到错误的排序顺序 - Vogel - Katze - Hund
因为它仍然按 typeA、typeB、typeC 排序
所以我正在寻找一种方法来本地化 NSFetchedResultsController 的排序。
我尝试了瞬态属性方法,但这不适用于排序键,因为排序键需要在实体中。
我没有别的想法。但我不敢相信在本地化所需的派生属性上使用 NSFetchedResultsController 是不可能的?
有相关的讨论,例如将自定义部分与 NSFetchedResultsController 一起使用?但不同之处在于自定义部分名称和排序键可能具有相同的顺序。不是我的情况,这是主要区别。
我猜,最后我需要一个派生属性上必要的 NSSortDescriptor 的排序顺序。此排序顺序也必须为 sectionKeyPath 服务。
感谢您的任何提示。
cocoa - setIncludesSubentities:在 NSFetchRequest 中,跨多个持久存储的实体被破坏
没有完全解决这个问题的现有技术: 核心数据迁移错误消息“'模型不包含配置'XYZ'。'”
我已将其缩小到一个特定问题。不过,设置需要一分钟。请多多包涵。
问题的要点是persistentStoreCoordinator(显然)不能保留对象图的一部分,其中当托管对象存储在不同文件中时,它们被标记为另一个对象的子实体。开始...
1) 我有 2 个 xcdatamodel 文件,每个文件都包含一个实体。在运行时,当构建托管对象模型时,我使用 setSubentities: 手动将一个实体定义为另一个实体的子实体。这是因为尚不支持在编辑器中跨多个文件定义子实体。然后我用 modelByMergingModels 返回完整的模型。
2) 我修改了 persistentStoreCoordinator 方法,以便为每个实体设置不同的存储。从技术上讲,它使用配置,并且每个实体都定义了一个且只有一个配置。
3)我为父实体设置了一个 fetchRequest,其中 setIncludesSubentities: 和 setAffectedStores: 只是为了确保我们同时涵盖了 1) 和 2)。当插入任一实体的对象时,它们都被添加到上下文中,并且它们都由 fetchedResultsController 获取并按预期显示在 tableView 中。
这是它开始行为不端的地方:关闭并重新启动应用程序后,仅获取父实体。
如果我使用 setEntity: 将请求的实体更改为“Note”的实体,则会获取所有注释。如果我将其更改为“浏览器”的实体,则会获取所有浏览器。让我重申一下,在对象首次插入上下文的运行期间,它将出现在列表中。只有在保存并重新启动后,获取请求才无法遍历层次结构。
因此,我只能得出结论,问题在于继承的存储。让我们回顾一下原因:
- - 两个实体都可以创建、插入到上下文中并查看,因此模型正在工作
- - 两个实体都可以通过一个请求获取,因此继承工作正常
- - 我可以确认文件正在单独存储,并且对象正在进入相应的存储区,因此正在保存
- - 使用为请求设置的任一实体启动应用程序都有效,因此从商店中检索工作正常
- - 这也意味着使用请求遍历不同的商店是有效的
- - 通过使用单个商店而不是多个商店,问题完全消失了,因此创建、存储、获取、查看等工作正常。
这只留下了一个罪魁祸首(在我看来):我使用 setSubentities 设置的继承:仅对会话期间创建的对象有效。
要么对象/实体被存储而没有继承信息,要么以编程方式定义的实体继承仅适用于新实例,或两者兼而有之。其中任何一个都是不可接受的。要么它是一个错误,要么我是方式,方式偏离路线。
我已经在这四处走动了两天;非常感谢任何见解。当前的解决方法 - 仅使用单个商店 - 完全有效,但如果我从应用程序中删除其中一个模型等,它不会是面向未来的。它也令人难以置信,因为我不明白为什么你如果核心定义(setSubentities:)不起作用,则将拥有所有这些基础架构,用于跨多个商店进行存储并在获取请求中设置受影响的商店。
iphone - uisearchbar + uitableview + nsfetchedresultscontroller
我有一个视图控制器,它有一个由 NSFetchedResultsController 填充的 UITableView。我想添加一个 UISearchBar,以便能够从核心数据中过滤通过 NSFetchedResultsController 显示在 UITableView 中的记录。
我想知道这样做的“最干净”的方法是什么,以及是否可以找到一个明确的例子。
iphone - NSFetchedResultsController:在更新期间使用 NSManagedObjectContext 会导致崩溃
这是我的控制器类的接口:
我使用以下代码来初始化fetchedResultsController:
如您所见,我使用的是与控制器类中定义的相同的managedObjectContext
这是 NSFetchedResultsControllerDelegate 协议的采用:
在 _configureCell:atIndexPath: 方法内部,我有以下代码:
我再次使用 managedObjectContext 。
但是当我尝试插入新项目时,应用程序崩溃并出现以下异常:
-[UITableView _endCellAnimationsWithContext:] 中的断言失败,/SourceCache/UIKit_Sim/UIKit-984.38/UITableView.m:774 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。数量更新后现有节中包含的行数 (4) 必须等于更新前该节中包含的行数 (4),加上或减去从该节中插入或删除的行数(1 插入,0已删除)。
幸运的是,我找到了一种解决方法:如果我在 _configureCell:atIndexPath: 方法中创建并使用单独的 NSManagedObjectContext: 方法应用程序不会崩溃!
我只想知道,这种行为是否正确?
这是一个示例项目。 注意 CrashMeViewController 的 '_configureCell:atIndexPath:' 和 '_addSomeRows' 方法