Edit an existing data in plist

2019-04-11 17:43发布

How can i override an existing data in a plist after checking if the data is already present or not, through coding

In Detail:

I am saving username and password in my plist file located in document directory. Now if user selects an change password option, the plist should check if his username exists or not. if it exists then the new password that he is entering should override the existing password in the plist.

can anyone help me with some piece of sample code

标签: ios xcode plist
2条回答
Rolldiameter
2楼-- · 2019-04-11 18:21

You can't change the plist stored in the application bundle. If you need to edit the user data stored in the plist, then you need to create the plist on the document directory.

Another option is NSUserDefaults. If there is huge data then I'll suggest sqlite3 database, else you can use plist or NSUserDefaults.

You can alter the value of your plist like:

NSString *path = //your plist path in document directory;
NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
NSString *userExist = [plistDict objectForKey:@"UserName"]; //test the user exist
if([userExist isEqualToString:@"Midhun"])                   //checking user exist or not
{
  NSString *userPwd = @"Midhun";
  [tempDict setObject:userPwd forKey:@"PassWord"]; //Password is your key
  [tempDict writeToFile:path atomically:YES];
}

Please refer this link for more. Here is a plist tutorial for you.

查看更多
Lonely孤独者°
3楼-- · 2019-04-11 18:40

You can't edit a data in plist if it is in your bundle directory. Files that are present inside the bundle have "read only" permission. While if your plist reside inside the document directory then you can edit it by using following steps. (1)Get the data from plist. (2)Update it. (3)Write back the updated data to plist.

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

if(path)

 NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];

//Update the respective dictionary dict here.

//write back to plist.

[dict writeTofile:path atomically:YES];
查看更多
登录 后发表回答