- (void)viewDidLoad
{
[super viewDidLoad];
if ([[NSFileManager defaultManager] fileExistsAtPath:pathString])
{
infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:pathString];
}
else
{
infoDict = [[NSMutableDictionary alloc]initWithObjects:[NSArray arrayWithObjects:@"BeginFrame",@"EndFrame", nil] forKeys:[NSArray arrayWithObjects:[NSNumber numberWithBool:YES],[NSNumber numberWithBool:YES], nil]];
if ([infoDict writeToFile:pathString atomically:YES])
{
NSLog(@"Created");
}
else
{
NSLog(@"Is not created");
NSLog(@"Path %@",pathString);
}
}
This is my code. I check if file is created, if not - I create a NSMutableDictionary
and I write it to file at path, but writeToFile
method returns NO
. Where is problem? If I create this file with NSFileManager
it works, but doesn't when I want to write a dictionary.
writeToFile:atomically
only works if the dictionary you call it on is a valid property list object ( see docs ).
For a NSDictionary
to be a valid property list object, among other things, its keys must be strings , but in your example the keys are NSNumber
instances.
You can not control the content you are going to write sometimes. For example, you can't avoid a null
value when you are going to write a JSON object that is gotten from a server.
NSData
is compatible with these "invalid" values, so converting NSArray
or NSDictionary
to NSData
is an ideal way in these cases.
write:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:jsonObject];
[data writeToFile:path atomically:YES];
read:
NSData *data = [NSData dataWithContentsOfFile:path];
NSDictionary *jsonObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.