我在iPhone应用程序中以传统的Master / Detail方式设置了表格视图。当我在详细信息屏幕上单击“保存”(添加我想要的信息后)后,它会切换回主列表,但是,主列表中单元格中出现的文本不会出现直到我用手指触摸细胞,然而,如果我用手指触摸细胞,它显然会切换到细节屏幕,然后我必须点击"返回"进入主列表,其中单元格现在具有它应该具有的文本。有趣的是,表格视图图像在保存后立即显示 - 我不必触摸单元格以使图像以我必须使文本显示的方式显示。
点击"保存"详细信息屏幕中的按钮运行此代码。 mnemonicField.text
保存到currentTopic,之后我将其设置为单元格中显示的文本
- (IBAction)save:(id)sender {
[self.currentTopic setTopic:topicField.text];
[self.currentTopic setMnemonic:mnemonicField.text]; //this should appear in cell on master
[self.currentTopic setMood: self.mood];
[self.delegate AddTopicViewControllerDidSave];
}
主表视图控制器是上述方法中引用的委托。这是方法。
-(void)AddTopicViewControllerDidSave{
NSError *error = nil;
NSLog(@"saving topick");
NSManagedObjectContext *context = self.managedObjectContext;
if (![context save:&error]){
NSLog(@"Error: %@", error);
}
[self.navigationController popToRootViewControllerAnimated:YES];
}
在cellForRowAtIndexPath
中,我调用另一种方法来设置单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"TopicCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath:indexPath];
[self configureCell:cell atIndexPath:indexPath];//sets up cell, see below
return cell;
}
这里设置了单元格configureCell:atIndexPath
。同样,请注意图像和textLabel.text都是在此方法中设置的,但我必须用手指触摸单元格以实际显示文本
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
// Configure the cell...
Topic *topic = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = topic.mnemonic;
NSLog(@"jokemood in configure cell %@", joke.mood);
UIImage *funnyimage = [UIImage imageNamed: @"nslaugh.png"];
UIImage *badimage = [UIImage imageNamed: @"nsbad.png"];
UIImage *crapimage = [UIImage imageNamed: @"nscrap.png"];
UIImage *mehimage = [UIImage imageNamed: @"nsmeh.png"];
UIImage *smileimage = [UIImage imageNamed: @"nssmile.png"];
switch ([topic.mood intValue]) {
case 0:
// do something
NSLog(@" topic table 0");
cell.imageView.image = crapimage ;
break;
case 1:
经过一些实验,我确定问题是上述函数中的这一行cell.textLabel.text = topic.mnemonic;
。如果我取出该行,则在保存在详细信息屏幕后,标题会立即显示在主列表的单元格中。但是,如果我将该行删除,那么当我启动应用程序时,当数据从核心数据中提取时,标题不会被分配。所以,无论哪种方式都存在问题。如果在上面的函数中保留了这一行cell.textLabel.text = topic.mnemonic;
,那么我必须触摸主列表中的单元格(在保存详细信息之后)才能显示文本,但是如果我取出该行,那么就是textLabel。当应用程序从核心数据中提取时,不会分配文本。这两种选择都不可接受。
你知道为什么会这样吗?
为了在主视图控制器中完成此处的prepareForSegue,我在目标视图控制器上根据主视图控制器中的主题设置currentTopic
if ([[segue identifier] isEqualToString:@"AddJoke"]){
MMAddTopicViewController *ajvc = (MMAddTopicViewController *)[segue destinationViewController];
ajvc.delegate = self;
ajvc.mood = nil;
Topic *newTopic = (Topic *)[NSEntityDescription insertNewObjectForEntityForName:@"Topic" inManagedObjectContext: [self managedObjectContext]];
NSMutableSet* relationship = [self.rootObject mutableSetValueForKey:@"subItems"];
NSManagedObject *lastObject = [self.fetchedResultsController.fetchedObjects lastObject];
double lastObjectDisplayOrder = [[lastObject valueForKey:@"displayOrder"] doubleValue];
[newTopic setValue:[NSNumber numberWithDouble:lastObjectDisplayOrder + 1.0] forKey:@"displayOrder"];
[relationship addObject:newJoke];
ajvc.currentTopic = newTopic; ///currentTopic in destination view controller is set to topic from master view controller
答案 0 :(得分:0)
我在主视图控制器的save方法中添加了[self.tableView reloadData];
,它从详细控制器调用(master用作详细信息的委托)。 Lynda.com教程我从didn复制它不得不使用self.tableView reloadData
,不知道为什么我的代码会这样做。
-(void)AddTopicViewControllerDidSave{
NSError *error = nil;
NSLog(@"saving cock");
NSManagedObjectContext *context = self.managedObjectContext;
if (![context save:&error]){
NSLog(@"Error: %@", error);
}
[self.navigationController popToRootViewControllerAnimated:YES];
[self.tableView reloadData];
}