gpt4 book ai didi

iphone - iOS 核心数据 - 更新多条记录

转载 作者:行者123 更新时间:2023-12-03 19:43:43 25 4
gpt4 key购买 nike

我已经搜索过,但仍然没有找到任何有效的东西。问题/答案要么太旧,要么根本不适合我。这是我第一次尝试“我自己的”应用程序。因为这似乎是一种通行权,所以我正在制作一个 list 应用程序。这就是我正在寻找的内容:

我的数据存储包含 4 个属性:name、category、isChecked、isActive(随着我的扩展,肯定会出现更多属性)

当我的 View Controller 最初加载时,NSFetchedResultsController有一个NSPredicate,它只检索属性isActive为YES(或 >[NSNumber numberWithBool:YES)。然后,它获取这些记录并将其显示到用户的适当单元格中。当用户单击单元格时,数据存储会相应地更新并更改 isChecked 属性。到目前为止一切都很好。

我现在需要做的是能够从列表中删除项目(1 个或多个)。具体来说,仅当当前的 isChecked 属性为 YES 时,我才需要它将数据存储属性 isCheckedisActive 更新为 NO。 (我不打算从数据存储中删除记录,因为它们将用于构建数据库供用户将来使用。)

除其他外,我使用过:

[[[self fetchedResultsController] fetchedObjects] 
setValue:[NSNumber numberWithBool:NO]
forKey:@"isChecked"];

这确实有效,它删除了复选标记并相应地更新了商店。问题是,我不仅向数据存储发出另一个请求来获取 isActive 项,它还会搜索已获取的整个“事件列表”并设置每个 isChecked > 属性为NO。对于小型列表来说,这可能不是太大的问题,但随着列表的扩展,这可能是一个问题。

另一个问题是,如果我添加:

[[[self fetchedResultsController] fetchedObjects] 
setValue:[NSNumber numberWithBool:NO]
forKey:@"isActive"];

它将我的所有列表项设置为“否”(以及同一方法中的第二个数据存储请求。)

所以我的问题是:如何遍历列表,仅查找已检查的项目并仅更新 isChecked 属性为的记录(设置 isChecked && isActive 属性 = NO)是,而不是遍历整个列表?

我尝试专门为此按钮操作创建一个单独的 fetchedResultsController,它确实有效(也就是说,它没有崩溃),但调试器弹出了一个相当大的“严重应用程序错误”。我不会发布错误消息,因为它很长并且很可能与任何解决方案无关。

任何帮助将不胜感激。提前致谢,请保持温柔:-]。

编辑

我尝试使用 for 循环,for (NSString *item in fetchedResultsController) 但收到错误...可能不会响应“countByEnumerateWithState” :对象:计数'

似乎这里需要某种循环,但同样,我找不到任何相关的东西或者它已经过时了。再次感谢您的帮助。

编辑2

这是我为此按钮/方法运行第二个单独的 fetchRequestController 时遇到的原始错误:

在调用 -controllerDidChangeContent: 期间从 NSFetchedResultsController 的委托(delegate)捕获异常。无效更新:第 0 节中的行数无效。更新 (4) 后现有节中包含的行数必须等于更新 (4) 之前该节中包含的行数,加上或减去该数字从该部分插入或删除的行数(插入 0 行,删除 3 行),并加上或减去移入或移出该部分的行数(移入 0 行,移出 0 行)。与 userInfo (null)

最佳答案

您只需循环 fetchedObjects 集合并更改托管对象即可。更改它们后,您需要重新加载列表(我猜您使用的是表格 View )。

我不知道您的类的名称是什么,但通常您可以循环遍历托管对象的集合并更改它们。请记住,如果您想在应用程序关闭时保留这些更改,则需要保存托管对象上下文。

NSArray* myCollection = [[self fetchedResultsController] fetchedObjects];
for(ActiveListData *managedObject in myCollection)
{
if(managedObject != nil && managedObject.isChecked)
{
managedObject.isChecked = NO;
managedObject.isActive = NO;
}
}

如果你想对数据库中的所有对象进行检查,你需要在 NSFetchedResultsController 中使用一个新方法,该方法对 isChecked 进行谓词检查,然后循环并编辑结果集合。

您可能想要发布您的错误代码,因为我们可以指出您做错了什么。

编辑:如果您不熟悉使用 Core Data,苹果文档提供了大量信息:http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/Articles/cdBasics.html

关于iphone - iOS 核心数据 - 更新多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14890716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com