如何在NSMutableArray中加载/保存数据

时间:2014-04-16 22:46:08

标签: ios objective-c nsmutablearray appdelegate

这是我的mainAppDelegate.h

#import <UIKit/UIKit.h>

@interface mainAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property NSMutableArray *toDoItems;

@end

和我的mainAppDelegate.m

#import "mainAppDelegate.h"

@implementation mainAppDelegate

- (void)applicationWillTerminate:(UIApplication *)application
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"toDoItems.plist"];
    [self.toDoItems writeToFile:filePath atomically:TRUE];
}
@end

我有另一个文件XYZToDoListViewController.m,代码为:

#import "XYZToDoListViewController.h"
#import "XYZToDoItem.h"
#import "XYZAddItemViewController.h"

@interface XYZToDoListViewController ()
@property NSMutableArray *toDoItems;
@end

@implementation XYZToDoListViewController

- (IBAction)unwindToList:(UIStoryboardSegue *)segue
{
    XYZAddItemViewController *source = [segue sourceViewController];
    XYZToDoItem *item = source.toDoItem;
    if (item != nil) {
        [self.toDoItems addObject:item];
        [self.tableView reloadData];
    }
}

- (IBAction)clearData:(UIBarButtonItem *)sender;
{
    [self.toDoItems removeAllObjects];
    [self.tableView reloadData];
}

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

}
return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.toDoItems = [[NSMutableArray alloc] init];
    self.navigationController.view.backgroundColor =
    [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg_full.png"]];
    self.tableView.backgroundColor = [UIColor clearColor];
    self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, -35, 0);
}
@end

这至少是我认为相关的。我的基本框架是this tutorial.所遵循的内容所以你可以看到我有一个名为.toDoItems的NSMutableArray。我希望它在退出应用程序时记住列表(不仅仅是最小化它;它已经这样做了。我想我有保存数据的代码,但我用什么来检查文件是否存在,以及是否那么,展示它? 当应用程序恢复时,这会影响我的clearData方法吗?

2 个答案:

答案 0 :(得分:0)

“我该怎么用来检查文件是否存在”

NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:your_file_path])

“..如果是的话,显示它?”

  

请阅读有关UITableView和UITableViewDataSource的信息   https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html

“当应用程序恢复时,这会影响我的clearData方法吗?”

clearData是一个按钮操作。只有在用户点击时才会调用它  一个按钮。它与应用程序启动/停止无关。

答案 1 :(得分:0)

好像我明白你想要保存你的NSMutableArray甚至在重启你的应用程序之后。 因此,您可以使用此代码将NSMutableArray与NSUserDefaults一起保存。

 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaultsPhoneId setObject:yourArray forKey:@"yourKey"];
[defaultsPhoneId synchronize];

这就是你如何取回它

yourArray=[[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"yourKey"]];

但是不要忘记在使用NSUserDefaults保存之前初始化它。 顺便说一句,你可以随时检查yourArray是否加载了

if([yourArray count]==0){
 //Your array is empty so you have to call it with @"yourKey". (second codes part)
}