我是iPhone开发新手,我使用的是XCode 4.2。我正在尝试保存一个NSMutable数组,这样当我关闭应用程序并重新打开它时,数据仍然在那里。我正在使用以下两个函数:
-(void)saveData{
[NSKeyedArchiver archiveRootObject:[data copy] toFile:[self dataFilePath]];
}
- (void)loadData
{
data = [NSKeyedUnarchiver unarchiveObjectWithFile:self.dataFilePath];
}
但我发现了两个主要问题: 1-当我切换视图并返回时,数据消失了2-当我完全退出应用程序时(即双击主按钮并将其从正在运行的应用程序列表中删除),数据也不会被擦除
我发现我可以使用这两个NSMutableArray方法:writeToFile
和initWithContentsOfFile
,但是我不知道在哪里调用它们(是在向UITableView添加项时调用吗?在viewDidLoad
里?
有人能给我一个示例代码吗?
提前感谢
发布于 2011-12-01 15:52:06
要保存数组,请使用writeToFile:atomically:
方法。它会将你的NSArray
内容保存为plist文件。要从plist文件加载数组,请使用initWithContentsOfFile:
方法。
请注意,只有当您的数组具有以下类实例NSString
、NSData
、NSDate
、NSNumber
NSArray
或NSDictionary
作为项时,这些方法才能保存您的内容。
您可以调用保存/加载方法,如下所示
// in view controller implementation
- (void) saveData {
[self.theArray writeToFile: self.filePath automatically:NO];
}
- (void) loadData {
self.theArray = [NSArray arrayWithContentsOfFile: self.filePath];
}
- (void) viewDidLoad {
[super viewDidLoad];
[self loadData];
}
- (void) viewWillDisappear: (BOOL) animated {
[super viewWillDisappear: animated];
[self saveData];
}
// in the UIApplicationDelegate implementation
- (void)applicationWillResignActive:(UIApplication *)application {
[myCustomController saveData];
}
发布于 2011-12-01 15:53:13
问题是,当这两个动作发生时,saveData不会被调用。因此,我建议使用这种方法将数据保存在AppDelegate上,以解决问题2(退出应用程序)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
//Save data
}
至于问题1(切换视图时),您只需要在viewController上调用此方法的saveData:
- (void)viewWillDisappear:(BOOL)animated
{
//Save data
}
希望这能有所帮助。
https://stackoverflow.com/questions/8344114
复制相似问题