gpt4 book ai didi

ios - 使用 Core Data 使用 didSelectRowAtIndexPath 编辑 TableView 单元格

转载 作者:行者123 更新时间:2023-11-29 10:51:27 25 4
gpt4 key购买 nike

我一直在关注 Stack Overflow 上的一些指南和问题,但没有通过基本的表格 View 编辑获得预期的结果。

我有一个应用程序,它是一个 TableView Controller 。如果我按下加号按钮,它会以模式方式显示一个 View Controller ,允许我将信息添加到 4 个文本字段(和一个日期选择器)。当我保存它时,它会保存到 Core Data,并且 TableView 会显示信息。我现在想简单地点击表格 View 中的一个单元格,将其带到另一个 View Controller 并在需要时编辑单元格。此 View Controller 看起来与添加 View Controller 相同。

目前在 Detail View 中,它没有向我显示 textField 中的值,并且 NSLog 返回 NULL。

在 TableView 中,我使用 NSFetchedResultsController 来填充数据库中的信息,NSManagedContext 如下来自 App Delegate:

- (NSManagedObjectContext *)managedObjectContext
{
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)])
{
context = [delegate managedObjectContext];
}
return context;
}

- (NSFetchedResultsController *)fetchedResultsController
{
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Information" inManagedObjectContext:managedObjectContext];
fetchRequest.entity = entity;
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"date.historyDate" ascending:NO];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"date.historyDate" cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}

CellforRow =

cell.textLabel.text = information.vendor;
cell.detailTextLabel.text = information.type;

我的didSelectRowAtIndexPath方法如下:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{

DetailViewController *detailViewController = [[DetailViewController alloc] init];
Information *selectedInformation = [self.fetchedResultsController objectAtIndexPath:indexPath];
detailViewController.selectedInformation = selectedInformation;
[self.navigationController pushViewController:detailViewController animated:YES];
}

DetailViewController 有一个信息属性:

@property (nonatomic, strong) Information *selectedInformation; 

Detail 中的 viewDidLoad 如下所示:

- (void)viewDidLoad
{
[super viewDidLoad];
self.title = self.selectedInformation.vendor;
self.editingNameField.text = self.selectedInformation.vendor;

NSLog(@"%@", self.editingNameField.text);
}

编辑:更新为包含 prepareForSegue

NSIndexPath *indexPath = [self.timelineTableView indexPathForCell:sender];
Information *selectedInformation = [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([segue.identifier isEqualToString:@"Editable Cell"])
{
DetailViewController *selectedInformationTVC = [segue destinationViewController];

[selectedInformationTVC setSelectedInformation:selectedInformation];
}

其中调用了 setSelectedInformation:- (void)setSelectedInformation:(信息*)selectedInformation{ self.title = self.selectedInformation.vendor;

self.editingNameField.text = self.selectedInformation.vendor;
NSLog(@"%@", self.editingNameField.text);

我并没有同时运行 didSelectRow 和 prepareForSegue,它是一个或另一个,但两者都给出相同的结果。

NSLog 给我 NULL,当 View Controller 确实出现在屏幕上时,它在该字段中没有任何信息。

我在 Storyboard 中转到了这个新的 View Controller ,所以我不确定我是否应该使用 prepareForSegue,但这也不起作用。

我的问题是 - 我是否需要在 DetailViewController 中执行某种获取到 Core Data 的操作?

我需要做什么才能让它发挥作用?

谢谢!

最佳答案

您的两种方法各有不同的问题:

当您使用 didDeselectRowAtIndexPathviewDidLoad 时,您的问题是您正在创建一个永远不会放置在屏幕上的 View Controller (因为不同的 View Controller 是由继续)。

当您使用 prepareForSegue 时,您的问题是您调用了 setSelectedInformation 并且它立即尝试与 editingNameField 进行交互,而这并不存在尚未(因为尚未加载 View )。

因此,您应该使用prepareForSegue,但您还需要使用viewDidLoad。将信息设置到目标 View Controller 。在目标中,加载该数据后将其应用于 View 。

最后,从调试的角度来看——记录源数据,而不仅仅是结果。这将带您找到问题的根源。

关于ios - 使用 Core Data 使用 didSelectRowAtIndexPath 编辑 TableView 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20269895/

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