如何解雇一个UIViewController

问题描述:

我用下面的方法来呈现一个名为DictAddSubSecondCell的UIViewController后重装的tableView:如何解雇一个UIViewController

// UIViewControler 1 
- (IBAction)addWord:(id)sender{ 
dictAddSubSecondCellController = [[DictAddSubSecondCell alloc] initWithNibName:@"DictAddSubSecondCell" bundle:nil]; 
[self presentModalViewController:dictAddSubSecondCellController animated:YES]; 
[dictAddSubSecondCellController release]; 
} 

,当我在DictAddSubSecondCell点击按钮:

- (IBAction)dismissAction:(id)sender{ 
[self dismissModalViewControllerAnimated:YES]; 
} 

中的tableView在UIViewControler 1没有重新加载它的数据,但我在viewWillApear方法中添加了一个方法:

[self.table reloadData]; 

但它仍然不起作用。我不知道这件事。对我有什么建议吗?谢谢。

这里的UIViewController 1的全部源代码:

// 
// DictAddSubSecond.m 
// 
// Created by Samuel Armstrong on 4/8/12. 
// Copyright 2012 __MyCompanyName__. All rights reserved. 
// 

#import "DictAddSubSecond.h" 
#import "DictionaryList.h" 

@implementation DictAddSubSecond 
@synthesize dictList, table, editButton; 
@synthesize dictAddSubSecondCellController; 

- (IBAction)addWord:(id)sender 
{ 
    dictAddSubSecondCellController = [[DictAddSubSecondCell alloc] initWithNibName:@"DictAddSubSecondCell" bundle:nil]; 
    [self presentModalViewController:dictAddSubSecondCellController animated:YES]; 
    [dictAddSubSecondCellController release]; 
} 

- (IBAction)toggleEdit { 
    [self.table setEditing:!self.table.editing animated:YES]; 

    if (self.table.editing) { 
     [editButton setTitle:@"Done"]; 
     [editButton setStyle:UIBarButtonItemStyleDone]; 
    } 
    else { 
     [editButton setTitle:@"Edit"]; 
     [editButton setStyle:UIBarButtonItemStyleBordered]; 

    } 
} 

- (IBAction)dismissAction:(id)sender 
{ 
    [self dismissModalViewControllerAnimated:NO]; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)refreshTableData 
{ 
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *file = [path stringByAppendingPathComponent:@"dictWithWords.tmp"]; 
    if (dictList == nil) { 
     NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:file]; 
     if ([array objectAtIndex:0] != nil) { 
      dictList = [[NSMutableArray alloc] initWithCapacity:1]; 
      self.dictList = array; 
      [array release]; 
     } 
     else 
     { 
      dictList = [[NSMutableArray alloc] initWithCapacity:1]; 
     } 
    } 
    [self.table reloadData]; 

} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self refreshTableData]; 
} 

- (void)someMethodToReloadTable:(NSNotification *)notification 
{ 
    [table reloadData]; 
} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethodToReloadTable) name:@"reloadTable" object:nil]; 


} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"reloadTable" object:nil]; 


} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 




#pragma mark - 
#pragma mark Table View Data Source Methods 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [dictList count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *MoveMeCellIdentifier = @"MoveMeCellIdentifier"; 
    UITableViewCell *cell = [self.table dequeueReusableCellWithIdentifier:MoveMeCellIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MoveMeCellIdentifier] autorelease]; 

     //A Boolean value that determines whether the cell shows the reordering control. 
     cell.showsReorderControl = YES; 

    } 
    NSUInteger row = [indexPath row]; 

    cell.textLabel.text = [dictList objectAtIndex:row]; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    return cell; 
} 

#pragma mark - 
#pragma mark Table View Delegate Methods 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSUInteger row = [indexPath row]; 
    [self.dictList removeObjectAtIndex:row]; 
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
        withRowAnimation:UITableViewRowAnimationMiddle]; 
} 


- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewCellEditingStyleDelete; 
} 




// Asks the data source whether a given row can be moved to another location in the table view. 
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 


//Tells the data source to move a row at a specific location in the table view to another location. 
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 
{ 
    NSUInteger fromRow = [fromIndexPath row]; 
    NSUInteger toRow = [toIndexPath row]; 

    id object = [[dictList objectAtIndex:fromRow] retain]; 
    [dictList removeObjectAtIndex:fromRow]; 
    [dictList insertObject:object atIndex:toRow]; 
    [object release]; 
} 


@end 
+0

逻辑似乎是合理的。你可以使用日志消息或调试器来检查两件事情:实际上是否调用了[[self.table reloadData]],如果是,那么你是否会在调用之后发现任何调用(例如'numberOfRowsInSection: ')? – 2012-04-07 16:18:38

+0

我在DictAddSubSecondCell中的Documents /文件夹中修改了一个文件(一个使用writeTOfile方法的NSArray实例),并且我想在UIViewControler 1中显示修改后的结果。 我现在只能通过重载UIViewControler 1来看到新的结果。 – Samblg 2012-04-07 17:35:06

+0

这意味着TableView无法在modalview解除后重新加载 – Samblg 2012-04-07 17:39:34

尝试称其为viewDidAppear:,而不是viewWillAppear:

+0

这是不会工作.. – Samblg 2012-04-07 17:33:48

+0

你确定viewDidAppear:被调用吗?在它内部放置一个NSLog语句来确保。输入委托方法很容易,必须准确地被调用。 – 2012-04-07 17:36:46

+0

- (void)viewWillAppear:(BOOL)当我解散时调用动画。 – Samblg 2012-04-07 17:45:29