更新应用后,不会在uitableview中删除数据

时间:2012-01-14 04:39:01

标签: iphone objective-c persistent-storage

我一直在阅读这么多关于此的主题,但我还没有找到它。

我想要一个UITableView,我可以在其中放置一些字典,在其中,有一些字段(大约4个)。到目前为止还可以,但我的问题是在将应用程序升级到新版本后,不擦除数据的最佳方法是什么。我的意思是,当用户升级应用时,由于更新,所有这些词/词典都不会被删除。

我不知道是否应该使用单词类的NSMutableArray(例如),或者使用Core Data或SQLite。

非常感谢任何帮助。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您的词典实际上是NSDictionaries,则使用NSCoding协议将它们序列化到文档内部的文件是简单,快速和可靠的。如果您升级应用程序,Documents目录的内容将保持不变。

这是我在其中一个应用中使用的代码(它保存了一个已被用户收藏的引号列表)

- (BOOL) saveQuotesToDisk
{
    //get path to events list    
    NSArray * dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * fullpath = [NSString stringWithFormat:@"%@/%@", [dirPaths objectAtIndex:0], @"FavQuoteList.plist"];

    //create data to be saved
    NSMutableDictionary * rootObject = [NSMutableDictionary dictionary];
    [rootObject setValue: _SavedQuotes forKey:@"_SavedQuotes"];

    //write data
    bool success = [NSKeyedArchiver archiveRootObject: rootObject
                                               toFile: fullpath];

    if (success) NSLog(@"Quotes list saved.");
    else NSLog(@"ERROR on saving quotes list!");

    return success;
}

- (BOOL) readFavoriteQuotesFromDisk
{
    //get path to quote list    
    NSArray * dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * fullpath = [NSString stringWithFormat:@"%@/%@", [dirPaths objectAtIndex:0], @"FavQuoteList.plist"];

    //read data
    NSDictionary * rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile: fullpath ];
    _SavedQuotes = [[rootObject valueForKey:@"_SavedQuotes"] retain];

    //check data
    if (_SavedQuotes == nil) return NO;
    else return YES;
}

只要符合NSCoding协议,您就可以向rootObject添加更多对象。

答案 1 :(得分:0)

我认为您可以将这些数据存储在NSUserDefaults或Documents目录中。更新时不会删除Documents目录的内容。