【发布时间】:2013-11-28 15:33:40
【问题描述】:
我一直在关注 Stack Overflow 上的一些指南和问题,但没有通过基本的表格视图编辑获得想要的结果。
我有一个应用程序,它是一个表格视图控制器。如果我按下加号按钮,它会弹出一个视图控制器,允许我向 4 个文本字段(和一个日期选择器)添加信息。当我保存它时,它会保存到 Core Data 并且表格视图会显示信息。我现在希望能够简单地点击表格视图中的单元格,被带到另一个视图控制器并在需要时编辑单元格。此视图控制器看起来与添加视图控制器相同。
目前在 Detail 视图中,它没有向我显示 textField 中的值,并且 NSLog 返回 NULL。
在表格视图中,我使用 NSFetchedResultsController 填充数据库中的信息,并且来自 App Delegate 的 NSManagedContext 如下:
- (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 有一个 Information 属性:
@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:(Information *)selectedInformation { self.title = self.selectedInformation.vendor;
self.editingNameField.text = self.selectedInformation.vendor;
NSLog(@"%@", self.editingNameField.text);
}
我没有同时使用 didSelectRow 和 prepareForSegue,它是其中之一,但都给出了相同的结果。
NSLog 给我 NULL 并且当视图控制器确实出现在屏幕上时,它在该字段中没有任何信息。
我在情节提要中使用了这个新的视图控制器,所以我不确定是否应该使用 prepareForSegue,但这也不起作用。
我的问题是 - 我是否需要在 DetailViewController 中对 Core Data 进行某种获取?
我需要做什么才能让它工作?
谢谢!
【问题讨论】:
-
如果你使用segue,你应该使用
prepareForSegue。显示该代码。 -
谢谢@Wain - 我已经更新了代码以反映这一点
标签: ios objective-c uitableview core-data didselectrowatindexpath