Iphone 如何从plist更新和删除字符串项和整个字典项
我有下面的plist结构 Q1在plist文件中保存全名后,如何更新/更改代码中的全名 Q2如何仅删除一个字典项(如上面的示例中的项0) 我将导航控制器TableView与详细示例一起使用Iphone 如何从plist更新和删除字符串项和整个字典项,iphone,cocoa-touch,iphone-sdk-3.0,uinavigationcontroller,cocos2d-iphone,Iphone,Cocoa Touch,Iphone Sdk 3.0,Uinavigationcontroller,Cocos2d Iphone,我有下面的plist结构 Q1在plist文件中保存全名后,如何更新/更改代码中的全名 Q2如何仅删除一个字典项(如上面的示例中的项0) 我将导航控制器TableView与详细示例一起使用 谢谢您没有真正更新或删除plist文件中的内容。这比这更复杂一点: 将plist文件读入内存 更改内存中的版本 将新版本写回磁盘 在图书馆读书是很平常的事。在您的情况下,由于根元素是数组,您需要执行以下操作: Root ---- Array Item 0- Dictionary fullName
谢谢您没有真正更新或删除plist文件中的内容。这比这更复杂一点:
Root ---- Array
Item 0- Dictionary
fullName ---- String
address ---- String
Item 1 ---- Dictionary
fullName ---- String
address ---- String
这里我们创建一个可变数组,因为我们知道我们将要改变其中的内容。如果我们只是想阅读信息,我们应该使用NSArray
而不是NSMutableArray
更改内存中的版本与操作标准容器一样简单:
NSMutableArray * plistContents = [NSMutableArray arrayWithContentsOfFile:plistFilePath];
在这里,我们必须制作字典的可变(可变)副本,因为在plist中读取只会创建不可变的NSDictionary
。因此,我们复制字典,更改要更改的值,然后用新修改的字典替换原始字典
将plist写入磁盘也很简单:
//delete the first dictionary:
[plistContents removeObjectAtIndex:0];
//Change a dictionary's full name:
NSMutableDictionary * firstDictionary = [[plistContents objectsAtIndex:0] mutableCopy];
[firstDictionary setObject:@"Mike" forKey:@"fullName"];
[plistContents replaceObjectAtIndex:0 withObject:firstDictionary];
[firstDictionary release];
您并不真正更新或删除plist文件中的某些内容。这比这更复杂一点:
Root ---- Array
Item 0- Dictionary
fullName ---- String
address ---- String
Item 1 ---- Dictionary
fullName ---- String
address ---- String
这里我们创建一个可变数组,因为我们知道我们将要改变其中的内容。如果我们只是想阅读信息,我们应该使用NSArray
而不是NSMutableArray
更改内存中的版本与操作标准容器一样简单:
NSMutableArray * plistContents = [NSMutableArray arrayWithContentsOfFile:plistFilePath];
在这里,我们必须制作字典的可变(可变)副本,因为在plist中读取只会创建不可变的NSDictionary
。因此,我们复制字典,更改要更改的值,然后用新修改的字典替换原始字典
将plist写入磁盘也很简单:
//delete the first dictionary:
[plistContents removeObjectAtIndex:0];
//Change a dictionary's full name:
NSMutableDictionary * firstDictionary = [[plistContents objectsAtIndex:0] mutableCopy];
[firstDictionary setObject:@"Mike" forKey:@"fullName"];
[plistContents replaceObjectAtIndex:0 withObject:firstDictionary];
[firstDictionary release];
您不直接操作存储在plist中的数据,而是将对象序列化到plist或从plist取消序列化对象。由于要更改数据,因此需要取消序列化为可变对象。”当您使用或选项时,s将取消plist的序列化以创建可变集合 这将获得一个嵌套的
NSMutableArray
s、NSMutableDictionary
s的集合,NSString
s或NSMutableString
s(取决于您是指定了NSPropertyListMutableContainers
还是NSPropertyListMutableContainers和leaves
)&c。解除plist序列化后,使用集合提供的任何方法删除(例如,NSMutableArray
,NSMutableDictionary
)或设置(例如,)项
有关详细信息,请阅读。如果不直接对存储在plist中的数据进行操作,则将对象序列化到plist或从plist取消序列化对象。由于要更改数据,因此需要取消序列化为可变对象。”当您使用或选项时,s将取消plist的序列化以创建可变集合 这将获得一个嵌套的
NSMutableArray
s、NSMutableDictionary
s的集合,NSString
s或NSMutableString
s(取决于您是指定了NSPropertyListMutableContainers
还是NSPropertyListMutableContainers和leaves
)&c。解除plist序列化后,使用集合提供的任何方法删除(例如,NSMutableArray
,NSMutableDictionary
)或设置(例如,)项
有关更多信息,请阅读。感谢您修复我的格式设置。我正在读“代码和预格式化文本”,谢谢你修改我的格式。我正在读“代码和预格式化文本”,谢谢Dave。明天是美国东部时间凌晨4点,我肯定孩子们会在6点叫醒我。您的信息非常翔实且经过深思熟虑;在我看来,它消失了,而且效果很好。谢谢现在我只需要让更新工作。更新发生在“详细信息”视图中,但根据您给我的信息,我想我可以找到答案。谢谢Dave。明天是美国东部时间凌晨4点,我肯定孩子们会在6点叫醒我。您的信息非常翔实且经过深思熟虑;在我看来,它消失了,而且效果很好。谢谢现在我只需要让更新工作。更新发生在details视图上,但根据您给我的信息,我想我可以找到答案。+1用于使用可变容器选项。我从不记得存在:)+1用于使用可变容器选项。我从来都不记得它的存在:)