iOS - 我应该使用啥来保存数据
Posted
技术标签:
【中文标题】iOS - 我应该使用啥来保存数据【英文标题】:iOS - what should I use for saving dataiOS - 我应该使用什么来保存数据 【发布时间】:2011-08-04 08:06:05 【问题描述】:假设您有一个项目列表,它是按日期排序的对象数组(字段:标题、描述、日期)。您从列表中选择一个项目并将其存储在本地设备上。然后加载按日期排序的数组 (UITableView) 中的存储项目列表。
我认为使用 Core Data 太过分了。你会使用什么以及如何使用? 太好了!
【问题讨论】:
【参考方案1】:我会让类实现NSCoding
并使用NSKeyedArchiver
将对象保存到文件中;
您可以循环遍历目录并使用NSKeyedUnarchiver
加载所有对象。
【讨论】:
哇...真...将对象保存为二进制数据。 好吧NSKeyedUnarchiver
使用plist文件,可以是二进制也可以是XML。【参考方案2】:
如果您的数组中没有太多项目,使用某种 xml 解决方案将是完美的。
plist 很棒,因为后端存储是人类可读和可编辑的。还有内置功能可以轻松地将字典和数组转换为 plist。例如(writeToFile:atomically:) 和 (arrayWithContentsOfFile:)
请注意,如果您的数组/字典仅包含以下项目,则只能使用这些方法:NSString、NSData、NSArray 或 NSDictionary。否则,您将不得不实现 NSCoding,这需要更多的工作。
COre 数据有很多好处,所以如果加载/搜索需要时间,请考虑切换。
【讨论】:
【参考方案3】:你也可以选择SQLite
和Plist
...
我更喜欢SQLite
,因为数据的排序会更容易..
【讨论】:
【参考方案4】:使用 PList 是在 iphone 应用程序中保存数据的最佳和最简单的方法。我会告诉你怎么做。
这是在 Plist 中保存数据的方式。
//Create String to get data ...
NSString *typeUrl = [NSString stringWithFormat:@"%@",url.text];
// Create Plist File
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"url.plist"];
NSString *tempurl = [NSString stringWithFormat:@"%@",typeUrl];
// Remove data previously stored in plist file ...
[[NSFileManager defaultManager] removeItemAtPath:path error:NULL];
// Create NSMutableArray to Store your string ...
NSMutableArray urlDetails = [[NSMutableArray alloc] init];
// Add String to Array ...
[urlDetails addObject:tempurl];
// Store that array in Plist File ...
[urlDetails writeToFile:path atomically:YES];
这是从 Plist 读取数据的方式。
// Find Plist file you created and cheack that file exsist ...
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"password.plist"];
BOOL passwordfileExists = [[NSFileManager defaultManager] fileExistsAtPath:path];
// if the file exsist create NSMutableArray and read the value and put that in to the String
if (passwordfileExists == YES)
NSMutableArray* plistDict = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSString *value = [NSString stringWithFormat:@"%@",[plistDict objectAtIndex:0]];
// Set that string to the textField
oldpassText = [NSString stringWithFormat:@"%@",value];
这就是我在 Plist 文件中保存数据的方式,而且非常简单。我想这会对你有所帮助。
【讨论】:
以上是关于iOS - 我应该使用啥来保存数据的主要内容,如果未能解决你的问题,请参考以下文章