gpt4 book ai didi

ios - 更新 didSelectRowAtIndexPath 上的核心数据

转载 作者:行者123 更新时间:2023-12-01 19:26:30 27 4
gpt4 key购买 nike

好吧,我已经在这几天了,似乎无法弄清楚我做错了什么。

我想要的是在选择一行时更新核心数据。我把它记下来了,但是我希望刷新表格 View 以显示更改。那就是我遇到问题的地方。我跑:

    [NSFetchedResultsController deleteCacheWithName:@"Root"];
fetchedResultsController = nil;
NSError *error = nil;
if(![[self fetchedResultsController] performFetch:&error]){

}
[[self tabVe] reloadData];

更新数据后,但tableview没有更新。我会改变观点并回来,但它是......卡住了。我仍然可以滚动并选择更多行,但表格永远不会刷新。我有一个分段 Controller ,它可以很好地按照我想要的方式更改数据,但是我说表格卡住的原因是因为在我选择一行后,分段 Controller 不会像它那样更改表格的内容将在选择一行之前。

我不是在编辑模式下这样做,我只是希望它在被选中时更新一个值。这是我的代码:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[self.fetchedResultsController sections] count];
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo name];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tabVe deselectRowAtIndexPath:indexPath animated:YES];
if(cyc == 1){
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(cell.accessoryType == UITableViewCellAccessoryCheckmark){
cell.accessoryType = UITableViewCellAccessoryNone;
}else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
Items *anItem = [self.fetchedResultsController objectAtIndexPath:indexPath];
anItem.need = @"0";
NSError *error = nil;
if(![managedObjectContext save:&error]){

}
[NSFetchedResultsController deleteCacheWithName:@"Root"];
fetchedResultsController = nil;
NSError *error = nil;
if(![[self fetchedResultsController] performFetch:&error]){

}
[[self tabVe] reloadData];
}
}
}

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [[managedObject valueForKey:@"name"] description];
cell.detailTextLabel.text = [[managedObject valueForKey:@"notes"] description];
if([[managedObject valueForKey:@"need"] description] == @"0"){
cell.accessoryType = UITableViewCellAccessoryNone;
}else if([[managedObject valueForKey:@"need"] description] == @"1"){
cell.accessoryType = UITableViewCellAccessoryNone;
}
}

我希望有人可以帮助我解决这个问题。 cyc 是一个 NSInteger 显示分段 Controller 的当前位置,我目前仅在 cyc 等于 1 时更新项目。

编辑:

一切顺利,直到
if(![managedObjectContext save:&error]){

}

正在运行。在那之后,那是 table 似乎卡住的时候。

最佳答案

只是猜测,但有两件事浮现在脑海:

  • 尝试减少 didSelectRowAtIndexPath: 中的代码根据我的经验,只需设置 fetchedResultsControllernil并让延迟加载处理获取。另一个想法是根本不使用任何缓存。这值得一试,如果它不影响性能,当然是合理的。
  • 我注意到您正在将两个字符串与 == 进行比较.我认为您应该使用 isEqualToString:这种比较的方法。另外,我不确定您为什么需要 description除了字符串之外的方法 - descriptionNSString是完全相同的字符串。尝试简化这一点。

  • 此外,从您的代码中不清楚变量 cyc是以及它来自哪里。您可能希望选择更易于人类理解的变量名称。

    关于ios - 更新 didSelectRowAtIndexPath 上的核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7167774/

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