3

NSMutableArrayはこのように私の.hファイルで宣言されています

@property (strong, nonatomic) NSMutableArray * numbers;

NSMutableArrayを使用して、保存するために入力されたデータを保存するにはどうすればよいですか?NSUserDefaults

すべての助けに感謝します

前もって感謝します

.hファイルのコード

@property (retain, nonatomic) IBOutlet UITableView *myTableView;
@property (strong, nonatomic) NSMutableArray * numbers;

.mのコード

@synthesize myTableView, numbers;

-(void) viewDidLoad
{

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:numbers forKey:@"numberArray"];

    NSMutableArray *resultArray = [NSMutableArray arrayWithArray:[defaults objectForKey:@"numberArray"]];



    [super viewDidLoad];
    // instantiate our NSMutableArray
    numbers = [[NSMutableArray alloc]initWithObjects:@"",@"", nil];






    //Add a edit button
    self.navigationItem.leftBarButtonItem = self.editButtonItem;

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

    self.navigationItem.rightBarButtonItem = addButton;

}
-(void) didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}

-(void)setEditing:(BOOL)editing animated:(BOOL)animated
{

    [super setEditing:editing animated:animated];
    [myTableView setEditing:editing animated:animated];




}


-(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];

}



#pragma mark - UITableView Datasource

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 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 = [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
        [numbers removeObjectAtIndex:indexPath.row];
        //remove from our tableView
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }


}


#pragma mark - UITableView Delegate methods


#pragma mark - UIAlertViewDelegate Methods


-(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(!numbers)

            numbers = [[NSMutableArray alloc]init];




    [numbers insertObject:tmpTextField atIndex:0];



        NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

        [self.myTableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic];



        }



}


@end

わかりました、私のアプリにはUITableViewがあります

ユーザーが「プラス」ボタンをタップすると、UIAlertViewがUITextFieldとともに表示され、ユーザーが単語を入力すると、テキストはUITableViewに移動しますが、ユーザーがアプリを終了すると、テキストはテーブルから削除されます。ユーザーが入力したテキストを保存したいので、ユーザーがアプリを終了して戻ってきたときに、テキストを保存したいと思います。NSUserDefaultsで保存したい。

4

1 に答える 1

16
//For saving 
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaults setObject:self.numbers forKey:@"numberArray"];
[defaults synchronize];

//For retrieving  
NSMutableArray *resultArray = [NSMutableArray arrayWithArray:[defaults objectForKey:@"numberArray"]];

終了後にアプリケーションを実行するときのシナリオによると...キーが存在viewDidLoadするかどうかを確認してNSUserDefaultsから、配列内の結果を取得して、に表示する必要がありUITableViewます。データを保存するには、ユーザーがアプリを最小化したときに通知を聞いて、データをデフォルトに保存することをお勧めします。

これがあなたのケースの作業コードです

- (void)viewDidLoad{

   [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    //Add a edit button
   self.navigationController.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.navigationController.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];
        }


}
于 2013-03-13T21:02:24.630 に答える