问题标签 [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.
objective-c - Objective-C:NSFetchedResultsSectionInfo 的 [sectionInfo name] 需要 dateFormatted
我有以下代码:
我基本上需要将 titleforheaderinsection 这是一个字符串日期,如“2009-12-04 00:00:00 +1100”转换为一个更好看的更短的字符串。因此,我尝试使用 dateFormatter setDateStyle 之类的方法对其进行转换,但是当我将 NSLog 输出到控制台时,我得到以下信息:
2009-12-22 09:42:10.156 app[94614:207] 部分名称 2009-12-04 00:00:00 +1100 2009-12-22 09:42:10.157 app[94614:207] convDate (null
显然 convDate 没有得到任何东西,但 [sectionInfo name] 应该是一个字符串。我已经将它解析成它自己的 NSString 变量,那为什么我不能在它上面实现 dateFormatter 呢?
更多信息:我在前面解析了日期,代码片段为:
现在,当我调试它时,基本上原始字符串是“Sat,2009 年 11 月 27 日 17:16:00 -800”,但是当我查看 convDate 时,结果是“2009-11-27 00:00:00 + 1100”。不知道为什么,但无论如何,这就是存储的内容。我会认为它会匹配我提到的样式,所以如果我将 dateFormatter 格式更改为任何其他类型,它会填满并且 convDate 变为 nil。
回顾我的 postController:我有一些感兴趣的片段:
}
我希望按日期排序,并在我的代码中,在 titleForHeaderInSection 中,格式化我的字符串日期以看起来更美观。
多谢你们
objective-c - NSPredicate:按 NSDate 属性的日期过滤对象
我有一个带有NSDate
属性的核心数据模型。我想按天过滤数据库。我认为解决方案将涉及一个NSPredicate
,但我不确定如何将它们放在一起。
我知道如何使用and比较两个NSDate
s的日期,但是如何用 an 过滤它?NSDateComponents
NSCalendar
NSPredicate
也许我需要在我的NSManagedObject
子类上创建一个类别,该类别可以返回仅包含年、月和日的裸日期。然后我可以在NSPredicate
. 这是您的建议,还是有更简单的方法?
iphone - NSFetchedResultsController 不更新 UITableView 的部分索引
我正在使用 NSFetchedResultsController 填充 UITableViewController,结果创建填充节标题和节索引的节。我正在使用以下方法来填充部分索引:
现在我遇到了一个问题。当我将新元素添加到与 NSFetchedResultsController 关联的 NSManagedObjectContext 时,新元素将被保存并适当地显示为 UITableView 中的单元格......除了一件事。如果新元素创建了一个新的 SECTION,则新的部分索引不会显示在右侧边距中,除非我弹出 UINavigationController 的堆栈并重新加载 UITableViewController。
我已经符合 NSFetchedResultsControllerDelegate 的接口并手动调用
在这两个委托方法的末尾:
虽然我可以调试并跟踪方法的执行并查看调用的重新加载调用,但 UITableView 的部分索引从不反映部分更改。
再次显示数据——新部分在 UITableView 中物理可见(或删除),但部分索引未更新。
我错过了什么吗?
iphone - 删除tableView中的行时出现Core Data错误
我有一个 UITableViewController 管理一个分组的 tableView。tableView 由 fetchedResultsController 填充。
如果我单击 NavigationBar 中的Edit按钮,然后选择一行并单击Delete按钮,则该行被删除并且一切顺利。
但是,如果我连续滑动以显示“删除”按钮并单击“删除”按钮,应用程序将崩溃并出现以下错误:
2010-01-06 15:25:18.720 Take10 [14415:20b] 严重的应用程序错误。在核心数据更改处理期间捕获到异常:-[NSCFArray objectAtIndex:]: index (1) beyond bounds (1) with userInfo (null)
2010-01-06 15:25:18.721 Take10 [14415:20b] 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“***-[NSCFArray objectAtIndex:]:索引 (1) 超出范围 (1)”
当然,错误中的索引号会根据我尝试删除行的部分中的行数而变化,并且该数字比尝试删除后表部分中剩余的行数多 1。
这是我尝试从 fetchedResultsController 中删除数据的代码。相同的方法对这两种情况都有反应,所以我不明白为什么在刷卡时它会崩溃。
有任何想法吗???
谢谢
杰克
iphone - 如何使用 NSFetchedResultsController 支持管理 UITableView 上的数据,如 iPhone Photo 应用
我是 iPhone 开发的初学者,我使用核心数据作为后备存储,并在 UITableView 上显示多个数据实体。每个数据实体将显示为预览缩略图,一个表格视图单元格将包含 1 到 4 个缩略图。这意味着 3 个表格单元格最多可以显示 12 个数据实体,就像 iPhone Photo 一样。
我还需要直接对每个预览缩略图进行操作,而不是对整个表格视图单元格进行操作。
如果在一个表格单元格上显示一个数据实体,NSFetchedResultsController 是完美的。但在我的场景中,NSFetchedResultsController 的索引路径与表视图的索引路径不匹配。我可以知道在这种情况下使用 NSFetchedResultsController 的好习惯是什么吗?我应该使用表格视图来支持这个实现吗?
iphone - NSFetchedResultsController 用于地图注释
NSFetchedResultsController 的文档指出,它旨在用于“有效地管理从核心数据获取请求返回的结果,以便为 UITableView 对象提供数据”。
我可以使用 NSFetchedResultsController 来管理地图注释集合吗?我不确定我会怎么做。有任何想法吗?
iphone - 应用程序在第二次选择同一行时崩溃
我正在使用的 iPhone 核心数据应用程序遇到问题。我有一个列出对象的表。如果我选择其中一个对象,我会转到一个显示对象详细信息的新 ViewController。
在详细视图中,我有一个返回按钮,可将我带回到主列表视图。
我可以选择任意数量的行,它会显示每个行的详细视图。但是,如果我尝试选择我已经选择的行,它会崩溃
程序接收信号:“EXC_BAD_ACCESS”。
我添加了一些断点并试图追踪它,并在我的 tableView cellForRowAtIndexPath 方法中找到了以下内容......
当我执行 MyEntity *thingamy = [fetchedResultsController objectAtIndexPath:indexPath] thingamy 时,每个对象的第一次是有效的并设置为有效的thingamy。在 gdb 中,我可以在此时设置断点并执行
po thingamy 我得到了预期的输出。
但是,我第二次选择特定行(例如选择第 0 行,返回,再次选择第 0 行)时,thingamy 设置不正确。
我可以查看任意数量的其他行,但是当我尝试选择一行时,我已经查看了发生这种情况的详细信息。
如果我有断点,并且在设置后尝试执行 po thingamy,我会得到以下信息:
程序收到信号 EXC_BAD_ACCESS,无法访问内存。原因:KERN_PROTECTION_FAILURE at address: 0x00000020 0x92ca3ed7 in objc_msgSend()
知道为什么 fetchedResultsController 在第一次调用时返回一个有效对象,而不是第二次调用吗?
更新
几天后,我很肯定 fetchedResultsController 被释放不是问题。我启用了 NSZombieEnabled 模式,但那里什么也没有。
此外,我可以从 fetchedREsultsController 中获取其他对象,而不是我已经访问过的对象。
例如,我可以获得 [fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 并在下一个视图中显示它。
当我回击并返回我的父视图时,我可以在 indexPathForRow:0 inSection:1 处获取对象并显示它。
再次回到开头,我尝试让 indexPathForRow:0 inSection:0 崩溃并出现 EXC_BAD_ACCESS。
在有 100 行的表中,我可以获取每一行一次,但是任何两次获取同一行的尝试都会崩溃,即使这些尝试是一个接一个。
iphone - 核心数据 NSFetchedResultsController - 返回的记录总数
我在 iPhone 应用程序中使用 NSFetchedResultsController,我想知道是否有一些简单的方法可以获取所有部分中返回的总行数。
与其获取 [[fetchedResultsController section] 计数],然后遍历每个部分以获取其计数,是否可以在一行中完成?
谢谢!
iphone - 为什么 NSFetchedResultsController 不能正确加载章节标题?
我正在使用 NSFetchedResultsController 和 UITableViewController。
我在核心数据模型中创建了一个瞬态字段,用作 UITableView 部分的标签。该字段的名称是“sectionIndex”。在我的应用程序中,“客户”实体有许多“工作”(一对多) - 所以我检索工作的查询(通过部分)按关联的“客户”名称对它们进行分组。
我已经在我的代码库中将此方法实现为“工作”实体上的类别。
并且字符串“sectionIndex”作为 sectionNameKeyPath 参数传递给 NSFetchedResultsController 的 init 方法。
如果我从模拟器中删除应用程序 - 那么应用程序第一次运行时,Jobs 的首页会按照此处列出的 sectionIndex 方法正确检索 Jobs 的 Client.name 并将 Jobs 分组。在日志中,我可以从字面上看到这个 sectionIndex 方法被多次调用。
但是,应用程序的后续运行不会调用 sectionIndex 方法......但是,部分标签仍然显示上次运行的值。这是怎么回事?运行之间是否有一些神奇的缓存?
这种行为会导致更大的问题。在查看 UITableView 时,如果我使用稍微不同的谓词释放和分配 NSFetchedResultsController,并且如果结果集是相同的大小,......那么这些相同的原始部分名称会出现在所有新结果中!
当然,没有新的日志条目。这意味着永远不会查找列,这意味着代码永远不会调用或查找瞬态字段。就好像这些领域没有错。
现在,如果备用查询返回不同数量的结果,则将加载部分名称。IE:在这种情况下,日志显示 - 在每次按下条形按钮时 - 正在调用的“sectionIndex”方法以及 UITableView 中显示的相应标签。
这太疯狂了——如果我有 2 个“活动”作业和 2 个“非活动”作业,并且我正在使用条形按钮在相应的查询之间来回切换……那么与初始查询相关联的任何部分标签都会显示给所有人后续表视图。
似乎 sectionNameKeyPath 字段仅由 FetchedResultsController 在结果集中有不同的结果时调用?实际结果不同 - 作业名称在实际行中正确显示 - 但同样,我不认为部分标签有错误或正确询问 NSFetchedResultsController 部分标签。我正在使用以下内容:
其中 results_ 是我为每个查询重新构建的 NSFetchedResultsController 。
我错过了什么吗?有没有办法手动清除 Core Data 缓存,使其不再那么聪明,并且在每次查询时,肯定会查找 sectionNameKeyPath?
对于它的价值,我取消了 xcdatamodel 中字段的“瞬态”选项,但我得到了相同的结果。
最后一个异常情况是,当我将第一个作业创建为非活动(不是默认的启动视图)时 - 如果我还创建了一个活动作业......非活动部分标签会同时贴在两者上。此外,当我关闭应用程序并重新开始时......非活动部分标签仍然显示 --- 即使在标题屏幕上,我正在显示应该显示完全不同标签的活动作业。
我不能不认为这是一个核心数据问题。重新启动应用程序返回的数据如此不正常是没有意义的。
sql - 核心数据:将额外的上下文传达给使用 NSFetchedResultsController 获取的对象?
我以文档描述的方式使用NSFetchedResultsController几乎是开箱即用的。这是我的代码的摘录。
注意两点:
1)谓词。在我的数据模型中, SomeEntity 和存储桶具有多对多关系。谓词表示“返回其相关存储桶对象具有此名称的所有 SomeEntity 对象”。按预期工作。
2) 我正在使用 sectionNameKeyPath。它实际上是模型对象中的一个方法,根据一些应用逻辑进行一些计算并返回标题。按预期工作。
现在,问题:
如何连接这两件事并使“titleAccessor”方法知道谓词?我希望部分标题根据谓词而有所不同(准确地说,取决于我在谓词中使用的 bucketId)。说清楚:
现在 titleAccessor 的工作原理是:
我想让它这样工作:
我有两个思路:1)如果这是一个普通的 CD 获取(如果有这样的事情),我可以设置模型对象的一些 volatile 属性并使用它。但是,我无权访问 NSFetchedResultsController 结果对象。2) 如果这是 SQL,我会执行类似“从 blah 中选择 a、b、c 作为“某事”;' 在运行时,“c”将是所需的值,然后我可以将其用作属性。但是,这不是 SQL。:)
如何完成上述所需的行为?
更新:
当然,您在发布问题后立即自己找出答案。(我想张贴是治疗的一部分。)我刚刚意识到我将以下内容放在我的 tableviewcontroller 代表中,正如文档所述:
我可以在这里做必要的修改。这是最好的方法吗?说“是”并提出一些简单的观点。:) (或提出更好的方法。)