从 NSMutableArray 更改为 .plist

Posted

技术标签:

【中文标题】从 NSMutableArray 更改为 .plist【英文标题】:Change from a NSMutableArray to a .plist 【发布时间】:2011-01-11 07:07:27 【问题描述】:

我已经完成了几个关于 uitableviews 的教程。

我已按照指示将所有信息放入“列表项”中,如下所示

    listOfItems = [[NSMutableArray alloc] init];

NSArray *countriesToLiveInArray = [NSArray arrayWithObjects:@"Iceland", @"Greenland", @"Switzerland", @"Norway", @"New Zealand", @"Greece", @"Rome", @"Ireland", nil];
NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"];

NSArray *countriesLivedInArray = [NSArray arrayWithObjects:@"India", @"U.S.A", nil];
NSDictionary *countriesLivedInDict = [NSDictionary dictionaryWithObject:countriesLivedInArray forKey:@"Countries"];

[listOfItems addObject:countriesToLiveInDict];
[listOfItems addObject:countriesLivedInDict];

这将创建一个分段的表格视图。我想知道如何将其更改为 .plist,而不是将其全部输入 RootViewController.m。我仍然希望它在分段的 tableview 中。

有没有一种简单的方法可以从这个 NSMutableArray、NSArray 和 NSDictionary 变成一个 plist?

【问题讨论】:

【参考方案1】:

这个writeToFile:atomically:有一个简单的方法:

[listOfItems writeToFile:destinationPath atomically:YES];

这将自动创建一个包含 plist 的文件。

【讨论】:

【参考方案2】:

这取决于您在 plist 中想要什么,以及您在其中放入了什么。如果条目和内容都是 CFPropertyList 类型(CFString、CFDate、CFData、CFDictionary、CFArray、CFNumber...),则只需使用类似 CFPropertyListCreateDeepCopy 的内容创建它。

如果您有不可转换的自定义对象(例如,您自己的 NSObject 子类),请查看可可归档主题。

【讨论】:

你也可以使用 NSPropertyListSerialization 我希望 plist 中的值完全相同,然后将其导入文件中。所以要产生相同的结果。 @Kurt Lane 当然,请参阅 CFPropertyList 支持的类型的文档(就是那个列表,加上 CFBooleanRef - 所有这些类型都是免费桥接的)。因此,如果将集合对象放入 plist,则集合中的每个条目也必须是支持的类型之一。如果您需要归档此列表之外的对象表示,那么您必须仅使用这些类型来支持归档/取消归档,或者使用基础的归档功能来归档更复杂的类型对象。您示例中的所有内容(数组、字典、字符串)都与(续)兼容 CFPropertyList 接口,可以保存为xml或二进制plist。因此,如果您需要添加一个复数(作为示例),您将必须 a)创建一个字典并为实数添加一个 CFNumber,为虚数添加一个 CFNumber(作为一个示例),或者 b)教您的自定义 NSObject 子类通过实现/采用@protocol NSCoding 来序列化/反序列化自己。对于您的示例, CFPropertyList 很好。如果你有复杂的 NSObject 子类,最好使用 NSCoder 接口并实现 NSCoding。对于这种简单的情况,您可以使用 CFPropertyList 或 NSPropertyListSerialization。【参考方案3】:

这是简单的函数end hear relization

这个函数正在更新 NSArray

- (void) WriteRecordToFile:(NSMutableDictionary*)countDict 
    // Here to write to file
    databasePathCallCount = @"plist path";
    NSMutableArray *countArray = [NSMutableArray arrayWithContentsOfFile:databasePathCallCount];
    if(countArray)
        [countArray addObject:countDict];
    [countArray writeToFile:databasePathCallCount atomically:NO];

【讨论】:

以上是关于从 NSMutableArray 更改为 .plist的主要内容,如果未能解决你的问题,请参考以下文章

NsMutableArray 无故更改为 UITableViewCellContentView

无法将 NSMutableArray 类型的值分配给 UIBarButtonItem 类型

在 Three.js PointCloud 中将正方形更改为圆形?

操场上的 NSMutableArray 导致 Xcode 7 出现错误

如何从 Matlab 中的 .ply 文件中提取 rgb 图像

仅将月份从'jan'更改为1,'feb'更改为2,'mar'更改为3 ...'dec'更改为12 [重复]