iPhone - UITableView 使用 plist 填充在模拟器中有效,但在 iDevice 上无效

Posted

技术标签:

【中文标题】iPhone - UITableView 使用 plist 填充在模拟器中有效,但在 iDevice 上无效【英文标题】:iPhone - UITableView populates using plist works in Simulator but does not on iDevice 【发布时间】:2012-12-02 18:41:05 【问题描述】:

我的问题是我为 iPhone/iPad 制作了一个网络浏览器,并且我在添加书签时测试了书签系统和 tableview plist 数据更新。它适用于模拟器端但是当我使用我的 iPhone 测试应用程序时,它没有显示更新 tableview 我确实通过 xcode 添加了一些数据到 plist 并且我添加的数据显示在 iPhone 上,但仍然没有更新以显示新的您通过应用程序输入的条目 plist 文件称为“bookmarks.plist”有什么问题?

这里是写入bookmarks.plist的代码

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *plistPath = [documentDirectory stringByAppendingPathComponent:@"bookmarks.plist"];

if (![fileManager fileExistsAtPath:plistPath]) 
    plistPath = [[NSBundle mainBundle] pathForResource:@"bookmarks" ofType:@"plist"];
    //[[NSFileManager defaultManager] copyItemAtPath:plistPath toPath:plistPath error:NULL];


NSMutableArray *dataRoot = [NSMutableArray arrayWithContentsOfFile:plistPath];

NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
[item setObject: _titleField.text forKey:@"title"];
[item setObject:_urlField.text forKey:@"url"];

[dataRoot addObject:item];
[dataRoot writeToFile:plistPath atomically:YES];

【问题讨论】:

标点符号。使用它,它很好。至于您的 plist 文件,您确定它不是“Bookmarks.plist”或类似的东西吗? ios 设备具有区分大小写的文件系统,而 iOS 模拟器在具有标准驱动器格式的 Mac 上运行时则没有。 xcode 标题中的文件看起来像这样“bookmarks.plist” 在设备上运行时,plistPath 在运行时是否填充或为零? plist (plistPath) 在开始时是空的,但是当用户将网站添加到文件时应该填满 【参考方案1】:

看起来您的 plist 文件不在设备上的文档目录中,您也没有在运行时将其复制到那里(已注释 LOC)。

所以plistPath 将是nil

如果您的 plistPath 是从 NSBundle 创建的,[dataRoot writeToFile:plistPath atomically:YES]; 文件不会被写入,因为捆绑资源是只读的。

这些信息应该对您有所帮助。

【讨论】:

以上是关于iPhone - UITableView 使用 plist 填充在模拟器中有效,但在 iDevice 上无效的主要内容,如果未能解决你的问题,请参考以下文章

iPhone + UITableView

iPhone:使用样式 UITableViewCellStyleValue1 的 UITableView 防止文本截断

如何使用 NSFetchedResultsController 支持管理 UITableView 上的数据,如 iPhone Photo 应用

iPhone-如何将 Storyboard 与自定义 UITableView 单元格和 CellWithIdentifier 一起使用

iPhone 用 JSON 结果填充 UITableView(使用在 UISearchBar 中输入的搜索)

iPhone - UITableView 使用 plist 填充在模拟器中有效,但在 iDevice 上无效