2013-04-07 54 views
0

我想用UITableView控制器保存所有東西,用一個按鈕,我不知道該怎麼做。我知道它有一個保存方法,但是當你回到應用程序的主屏幕,並返回到視圖控制器,文本消失了,或者當我刪除了它仍然存在的東西。在我的.m文件我想保存在UITableView控制器中的所有東西,用一個按鈕

#import "HomeWorkViewController.h" 

@interface HomeWorkViewController() 

@end 

@implementation HomeWorkViewController 
@synthesize adView; 
@synthesize myTableView, numbers; 

-(void) viewDidLoad 
{ 
    adView.delegate=self; 
    [super viewDidLoad]; 
    self.navigationItem.leftBarButtonItem = self.editButtonItem; 
    // check here if key exists in the defaults or not, if yes the retrieve results in array 
    if([[NSUserDefaults standardUserDefaults] objectForKey:@"numberArray"] != nil) { 
     self.numbers = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"numberArray"]]; 
    } 

    //Register for the notification when user go to background or minimize the app, just save the array objects in the defaults 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(appWillGoToBackground:) 
              name:UIApplicationWillResignActiveNotification object:[UIApplication sharedApplication]]; 

    //Add the Add button 
    UIBarButtonItem * addButton = [[UIBarButtonItem alloc] 
            initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
            target: self action: @selector(insertNewObject)]; 
    self.navigationItem.rightBarButtonItem = addButton; 
} 

-(void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [self.myTableView setEditing:editing animated:animated]; 
} 

-(void)appWillGoToBackground:(NSNotification *)note { 
    NSLog(@"terminate"); 
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
    [defaults setObject:self.numbers forKey:@"numberArray"]; 
    [defaults synchronize]; 
} 

-(void)insertNewObject{ 
    //Display a UIAlertView 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Enter HomeWork" message: @"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; 
    alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
    [alert show]; 
} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    //Only perform the following actions if the user hits the ok button 
    if (buttonIndex == 1) 
    { 
     NSString * tmpTextField = [alertView textFieldAtIndex:0].text; 
     if(!self. numbers){ 
      self.numbers = [[NSMutableArray alloc]init]; 
     } 
     [self.numbers insertObject:tmpTextField atIndex:0]; 
     NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
     [self.myTableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 
} 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return self.numbers.count; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *cellIdentifier = @"cell"; 

    UITableViewCell *cell = [ tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if(cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault 
             reuseIdentifier: cellIdentifier]; 
    } 
    cell.textLabel.text = [self.numbers objectAtIndex:indexPath.row]; 
    return cell; 
} 

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     //remove our NSMutableArray 
     [self.numbers removeObjectAtIndex:indexPath.row]; 
     //remove from our tableView 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath 
toIndexPath:(NSIndexPath *)toIndexPath 
{ 
} 

-(void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    adView.hidden=FALSE; 
    NSLog(@"Has ad, showing"); 
} 

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    adView.hidden=TRUE; 
    NSLog(@"Has no ads, hiding"); 
} 

-(void)dealloc 
{ 
    [adView release]; 
    [super dealloc]; 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 
@end 
+0

問題不明確,需要更多的澄清。但我明白你可以做到這一點,將HomeViewController的代理傳遞給TableViewController。 – 2013-04-07 16:07:58

回答

0

代碼看起來像你只保存數據時,應用程序進入後臺。如果你想立即保存數據而不是僅僅當應用程序關閉時,只需在alertView中將你的數組寫入NSUserDefaults:clickedButtonAtIndex:

+0

你也想移動代碼,你將保存的數組從NSUserDefaults分配到self.numbers來查看willAppear – geraldWilliam 2013-04-07 17:53:15

+0

你可以給我一些示例代碼 – user2167312 2013-04-08 01:11:08

相關問題