modifying a plist is not working
i have to modify a BOOL value in my plist file stored with the bundle.i am able to access the dictionary which i have to modify .from nslogging i can see that dict is updated with the new value ,but the problem is when i check the plist in bundle it is not being modified.any clue on why it is not updating the plist
NSString* plistPath = nil;
NSFileManager* manager = [NSFileManager defaultManager];
if (plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"TopicsList.plist"])
{
if ([manager isWritableFileAtPath:plistPath])
{
NSMutableArray* dictarrays = [NSMutableArray arrayWithContentsOfFile:plistPath];
NSMutableDictionary *dict=[dictarrays objectAtIndex:indexPath.row];
NSLog(@"%@ ",dict );
[dict setObject:[NSNumber numberWithBool:YES] forKey:@"isPaid"];
NSLog(@"%@ ",dict );
[dict writeToFile:plistPath atomically:NO];
NSLog(@"%@ ",dict );
[manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModification开发者_如何学PythonDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:&error];
}
}
Is the plist a part of your resources? Not sure if we can edit a plist there. Copy the plist to your app's Documents folder and update it there.
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *plistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"TopicsList.plist"];
success = [fileManager fileExistsAtPath:plistPath];
if(!success){
//file does not exist. So look into mainBundle
NSString *defaultPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TopicsList.plist"];
success = [fileManager copyItemAtPath:defaultPath toPath:plistPath error:&error];
}
Now whatever changes you need to make to the plist or read data from the plist, read it from the copy in Documents folder.
You must store your plist in the documents directory. After that, you must also save the plist upon leaving the app. Otherwise, the plist is in the main bundle and cannot be modified.
Is there any error
Check with
NSError *error = nil
[dict writeToFile:plistPath atomically:YES encoding:NSASCIIStringEncoding error:&error];
if (error) {
NSLog(@"Error: %@", [error description]);
} else {
NSLog(@"Success");
}
精彩评论