在 viewDidLoad 我有:
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
对于 insertNewObjectMethod 我有:
- (void)insertNewObject:(id)sender
{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
CommodityTypes *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
self.detailViewController.detailItem = newManagedObject;
self.detailViewController.context = context;
[self performSegueWithIdentifier:@"showCommodityTypesDetail" sender:sender];
}
还有:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showCommodityTypesDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
CommodityTypes *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
NSManagedObjectContext *context = self.fetchedResultsController.managedObjectContext;
[[segue destinationViewController] setDetailItem:object];
[[segue destinationViewController] setContext:context];
}
}
当我构建并运行应用程序并选择 + 按钮时,它会转到详细信息页面,但不会加载 newManagedObject 信息。
我的猜测是 performSegueWithIdentifier 触发了对 prepareForSeque 的调用,并且因为没有选定的行,所以没有加载任何内容,但是这个方法覆盖了之前的 self.detailViewController.detailItem = newManagedObject; self.detailViewController.context = 上下文;
我该如何解决这个问题?首先猜测,insertNewObject 创建 newManagedObject。如何选择它出现在表格中的行?
在这里开始 iOS 程序员。
Eureka
self.detailViewController
是iPad 拆分视图控制器使用的详细视图控制器实例,而不是iPhone界面使用的详细视图控制器实例。
performSegueWithIdentifier
确实向prepareForSegue
. 为了解决我的问题,我必须做两件事。
创建从主视图控制器到详细视图控制器的第二个 segue。原始序列从表视图行链接到详细视图控制器。我从主视图控制器链接到详细视图控制器的第二个 segue。(使用 Interface Builder 中视图控制器页脚中的视图控制器图标。)
在选择第二个序列的唯一名称的 if 语句中将对象创建行从insertNewObject
移至。prepareForSeque
- (void)insertNewObject:(id)sender
{
[self performSegueWithIdentifier:@"ctAddButtonToDetail" sender:sender];
}
和
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"ctMasterRowToDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
CommodityTypes *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
NSManagedObjectContext *context = self.fetchedResultsController.managedObjectContext;
[[segue destinationViewController] setDetailItem:object];
[[segue destinationViewController] setContext:context];
}
if ([[segue identifier] isEqualToString:@"ctAddButtonToDetail"]) {
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
CommodityTypes *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
[[segue destinationViewController] setDetailItem:newManagedObject];
[[segue destinationViewController] setContext:context];
}
}