从 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 出现错误