如果我希望用户能够编辑包含数字数据的表格的条目(用户将单击表格单元格,然后在该子视图上,他们将输入一个数字,然后返回主表格视图),我在想我只是将条目添加到 NSMutabaleArray。如果是这样,当用户离开应用程序时,这些值是否仍然存在?如果是,我是否还需要一个清晰的表方法来释放数组?谢谢。
问问题
489 次
2 回答
2
您的应用程序的数据不会自动保留。
如果您有少量数据,您可以将一个集合(如数组)写入应用程序的 Documents 目录中的属性列表(plist) 文件中。
如果您有大量数据,我建议使用 Core Data。
于 2009-12-24T18:31:31.523 回答
0
快速而肮脏的方法是使用 NSKeyedArchiver 将 NSArray 写入文件。然后,您必须在应用程序启动时将文件中的数据读回您的 NSArray。
这是一个片段:
这将获取文档路径:
- (NSString*)pathForDataFile
{
//Get the path of the Documents directory
NSArray* paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
NSString* documentsDirectory = [paths objectAtIndex: 0]; //Path to the documents directory
//Get the path to my file in /Documents
NSString* documentsPath = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithFormat: @"%@.plist", @"FileName"]];
return documentsPath;
}
这些将保存和加载:
- (BOOL)saveDataToDisk
{
NSString* path = [self pathForDataFile];
NSMutableDictionary* rootObject = [NSMutableDictionary dictionary];
if ( self.yourArray )
[rootObject setValue: self.powerListCollection.items forKey: kYourKey];
[NSKeyedArchiver archiveRootObject: rootObject toFile: path];
return YES;
}
-
- (BOOL)loadDataFromDisk
{
NSString* path = [self pathForDataFile];
NSFileManager* manager = [NSFileManager defaultManager];
if ( [manager fileExistsAtPath: path] )
{
NSLog( @"Saved data found, loading data from %@", path );
NSMutableDictionary* rootObject = nil;
rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile: path];
NSArray* self.yourArray = [rootObject objectForKey: kYourKey];
}
else
{
NSLog( @"No saved data, initializing objects with default values." );
}
return YES;
}
请注意,您需要保留从 objectForKey 返回的任何内容:
于 2009-12-24T20:23:02.407 回答