0

我是 Xcode 编程新手,我的应用程序(待办事项列表)有问题。一切正常,但是当应用程序退出(未最小化)时,主视图控制器不会保存上面的内容(如果您有 ToDo 列表,则会出现问题)。现在我想知道我必须实现哪些代码才能在退出时保留视图控制器的状态以及在哪里?(应用程序委托或在我的主视图控制器窗口中)

.m 文件:

@implementation RHTaskListViewController

@synthesize tasks = _tasks;

-(id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self)
    {
        //custom
    }
    return self;
}

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

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tasks = [[NSMutableArray alloc] init];
}




- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.tableView reloadData];
}

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

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

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





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

//Segue from Add task to task list
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"AddTaskSegue"])
    {

        UINavigationController *navCon = segue.destinationViewController;

        RHAddTaskViewController *addTaskViewController = [navCon.viewControllers objectAtIndex:0];

        addTaskViewController.taskListViewController = self;
    }


    else if ([segue.identifier isEqualToString:@"EditDoneTaskSegue"] || [segue.identifier isEqualToString:@"EditNotDoneTaskSegue"])
    {
        RHEditTaskViewController *editTaskViewController = segue.destinationViewController;
        editTaskViewController.task = [self.tasks objectAtIndex:self.tableView.indexPathForSelectedRow.row];
    }
}
//Segue from Add task to task list


//Move Items
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath         toIndexPath:(NSIndexPath *)toIndexPath
{
    RHTask *movedTask = [self.tasks objectAtIndex:fromIndexPath.row];
    [self.tasks removeObjectAtIndex:fromIndexPath.row];
    [self.tasks insertObject:movedTask atIndex:toIndexPath.row];
}

-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
//Move Items


//Delete Items
-(void)tableView:(UITableView *)tableView commitEditingStyle:    (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        [self.tasks removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]     withRowAnimation:UITableViewRowAnimationFade];
    }

    else if (editingStyle == UITableViewCellEditingStyleInsert)
    {

    }
}
//Delete Items


#pragma mark - Table view data source

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

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



-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *NotDoneCellIdentifier = @"NotDoneTaskCell";
static NSString *DoneCellIdentifier = @"DoneTaskCell";

RHTask *currentTask = [self.tasks objectAtIndex:indexPath.row];

NSString *cellIdentifier = currentTask.done ? DoneCellIdentifier : NotDoneCellIdentifier;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
//Saving the tasks

//[[NSUserDefaults standardUserDefaults] setString:saveTask forKey:@"taskSaved"];


//Saving the tasks

cell.textLabel.text = currentTask.name;


return cell;
}



#pragma mark - IBActions

-(void)editButtonPressed:(id)sender
{
    self.editing = !self.editing;
}

@end

.h 文件:

#import <UIKit/UIKit.h>

@interface RHTaskListViewController : UITableViewController

@property (nonatomic, strong) NSMutableArray *tasks;

-(IBAction)editButtonPressed:(id)sender;

@end
4

2 回答 2

2

你可以NSUserDefaults用来实现你的目标。

获取此教程链接

主要代码:

为了节省:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"key1" forKey:@"todo1"];
[defaults synchronize]; // do NOT forget this line!

对于检索:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *todo1 = [defaults objectForKey:@"key1"];

请记住,您可以保存NSArrayNSDictionaryNSStringNSNumber所有符合NSCoping协议的对象。

于 2014-07-29T06:37:58.507 回答
1

正如 gran33 已经指出的那样,您可以使用它NSUserDefaults来存储您的应用程序数据。

如果您的待办事项列表比任务列表更复杂(即每个任务都有更多属性,如时间、描述、位置等...),我建议使用核心数据来存储您的数据。在这里查看 CoreData 教程。

于 2014-07-29T06:38:31.453 回答