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】:

你也可以选择SQLitePlist...

我更喜欢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 - 我应该使用啥来保存数据的主要内容,如果未能解决你的问题,请参考以下文章

当数据不是静态的时,我应该如何保存大量数据。 iOS、可可触控、Obj-C

如何从 iOS 应用程序中删除保存数据

在哪里保存我的 iOS 应用程序的保存文件

iOS:监控电池电量使用更多电池?应该自动保存吗?

hbase中用啥来区分多版本的数据

在 iOS 中保存 JSON 对象