在运行应用程序时将数据写入 plist 并将它们读取到 UITable

Posted

技术标签:

【中文标题】在运行应用程序时将数据写入 plist 并将它们读取到 UITable【英文标题】:Write data to plist while running app and read them to UITable 【发布时间】:2013-11-10 20:49:25 【问题描述】:

我想将数据存储到 UITable 的 plist 中,但到目前为止,如果它们已经写在那里,我可以从 plist 中读取它们。我想在运行应用程序时写入数据。 这是在UITableView中将数据保存到单元格的方法

    -(IBAction)saveAction:(id)sender


    Tricks *trick = [[Tricks alloc]init];
    trick.trickName = self.trickLabel.text;
    //trick.trickPhoto = self.ImagePhoto.image;
    [[Tricks trickList]insertObject:trick atIndex:0];
    [self.navigationController popViewControllerAnimated:YES];

在 detailViewController 中,我可以拍照并在地图上放置图钉。 单元格的照片、图钉和文本存储在 NSObject 的子类中。

加载detailViewController

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if([[segue identifier] isEqualToString:@"detailTrick"])
        NSIndexPath *indexPath = nil;

        indexPath = [self.tableView indexPathForSelectedRow];

        DetailViewController *detailViewController  = [segue destinationViewController];
        Tricks *trick = [[Tricks trickList] objectAtIndex:indexPath.row];
        detailViewController.fileText = trick.trickName;
        detailViewController.pinMKPoint = trick.pinNotation;

        
        detailViewController.trick = trick;
    

连接到 plist 的代码

NSString *trickList = [[NSBundle mainBundle]pathForResource:@"trickList" ofType:@"plist"];

    _trick = [[NSMutableDictionary alloc]initWithContentsOfFile:trickList];
    _trickPhotos = [[_trick objectForKey:@"trickPhotos"]objectAtIndex:0];
    _trickNames = [[_trick objectForKey:@"trickNames"]objectAtIndex:0];
    _mapAnnotations = [[_trick objectForKey:@"pinKit"]objectAtIndex:0];

我想将所有数据写入 plist 并在启动应用程序时读取它们。 感谢您的建议。

【问题讨论】:

显示Tricks的定义,这样数据类型就清楚了。为什么是plist?您尝试过什么/看到了什么错误? 没有错误,但我注意到几个小时后存储在 UITablewView 中的数据被删除了。我被告知这是因为其他应用程序使用了 RAM 并且应用程序仅依赖于多任务处理。 @property(strong, nonatomic) UIImage *trickPhoto; @property(strong, nonatomic) NSString *trickName; @property(nonatomic) BOOL 登陆; @property(nonatomic) MKPointAnnotation *pinNotation; 显示你的读写plist的代码。 NSString *trickList = [[NSBundle mainBundle]pathForResource:@"trickList" ofType:@"plist"]; _trick = [[NSMutableDictionary alloc]initWithContentsOfFile:trickList]; _trickPhotos = [[_trick objectForKey:@"trickPhotos"]objectAtIndex:0]; _trickNames = [[_trick objectForKey:@"trickNames"]objectAtIndex:0]; _mapAnnotations = [[_trick objectForKey:@"pinKit"]objectAtIndex:0];我只能阅读....我正在寻求写作方面的建议 请用代码更新您的问题。不要在评论中发布。 【参考方案1】:

你已经清楚地看到了 NSDictionary 的-initWithContentsOfFile: 方法。你也看过-writeToFile:atomically:吗?这似乎是您正在寻找的行为。如果您需要更具体的内容,请更新您的问题以寻求更具体的帮助。

【讨论】:

问题在于尝试将 plist 写入应用的资源包。 首先,如果应用程序使用MVC模型并且数据存储在NSObject子类中,我什至需要将数据存储在plist中吗?? @JozefVrana 对象仅驻留在内存中。当您的应用程序终止时,仅存储在那里的任何数据最终都会丢失。如果您需要在用户关闭/后台您的应用程序后保留此数据,那么您必须将其存储在一些持久存储中。 plist 文件当然是一种选择。 至于写入应用程序资源包的问题,​​请参阅 ios Standard Directories: Where Files Reside 和 Locating Items in the Standard Directories

以上是关于在运行应用程序时将数据写入 plist 并将它们读取到 UITable的主要内容,如果未能解决你的问题,请参考以下文章

写/读 plist 文件 iPhone

我们如何在 NSMutableArray 中添加带有 Image 作为对象的 NSMutableDictionary 并将这个数组写入 Plist

属性列表应该由它自己的模型对象管理吗?

将数组内容(自定义类型)写入 plist 作为 swift 中的键控数组

阅读 plist 字典

在加入并将它们导出到 GCS 之前,如何等待 BigQuery 上的异步表写入?