Почему NSMutableDictionary не хочет писать в файл? - PullRequest
4 голосов
/ 03 января 2012
- (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);
        }
}

Это мой код. Я проверяю, создан ли файл, если нет - я создаю NSMutableDictionary и записываю его в файл по пути, но метод writeToFile возвращает NO. Где проблема? Если я создаю этот файл с NSFileManager, он работает, но не работает, когда я хочу написать словарь.

Ответы [ 2 ]

29 голосов
/ 03 января 2012

writeToFile:atomically работает только в том случае, если словарь, к которому вы его вызываете, является допустимым объектом списка свойств ( см. Документы ).

Если NSDictionary является действительным объектом списка свойствкроме всего прочего, его ключи должны быть строками , но в вашем примере это NSNumber экземпляры.

12 голосов
/ 18 декабря 2013

Вы не можете контролировать контент, который собираетесь писать иногда.Например, вы не можете избежать значения null, когда собираетесь писать объект JSON, полученный с сервера.

NSData совместимо с этими "недействительными" значениями, поэтому преобразование NSArray или NSDictionary в NSData является идеальным способом в этих случаях.

запись:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:jsonObject];
[data writeToFile:path atomically:YES];

читать:

NSData *data = [NSData dataWithContentsOfFile:path];
NSDictionary *jsonObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
...