сохранение NSMutableDictionary в каталог документов - PullRequest
0 голосов
/ 14 марта 2012

Я хочу сохранить NSMutableDictionary в каталоге документов автоматически, когда пользователь выходит из представления.Вот код, который я пытаюсь реализовать.Это не работает, хотя.Может кто-нибудь мне помочь.

- (void)viewDidUnload
{
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:

                                       @"audio.caf",@"pictureAudioKey",
                                       @"audio.m4a",@"englishAudioKey",
                                       @"audio2.m4a",@"spanishAudioKey",
                                       @"audio3.m4a",@"frenchAudioKey",
                                       @"audio4.m4a",@"germanAudioKey",
                                       @"audio5.m4a",@"italianAudioKey",
                                       @"audio6.m4a",@"chineseAudioKey",
                                       @"image.jpg",@"photoimagekey",
                                       @"name.txt", @"identity", 
                                       @"imagename.txt",@"numberkey",nil];

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [documentPaths objectAtIndex:0];
    NSString *dictionaryPath = [documentsDirectory stringByAppendingPathComponent:[[self imageNameTextField]text]];
    dictionaryPath =[dictionaryPath stringByAppendingFormat:@"dicitonary" ] ;
    NSDictionary *savedDictionary = dictionary;


    NSLog(@"The Save file is:%@", savedDictionary);

    [savedDictionary writeToFile:dictionaryPath atomically:YES];

       [super viewDidUnload];

}

Итак, я получил словарь для сохранения в каталоге документов, поместив его с помощью кнопки.Например,

- (void)saveAction:(id)sender {



    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:

                                       @"audio.caf",@"pictureAudioKey",
                                       @"image.jpg",@"photoimagekey",
                                       @"name.txt", @"identity", 
                                       @"imagename.txt",@"numberkey",nil];



    NSArray *documentPaths3 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory3 = [documentPaths3 objectAtIndex:0];
    NSString *dictionaryPath3 = [documentsDirectory3 stringByAppendingPathComponent:[[self imageNameTextField]text]];
    dictionaryPath3 =[dictionaryPath3 stringByAppendingFormat:@"dictionary" ] ;
    NSDictionary *savedDictionary2 = dictionary;


    NSLog(@"The Save file is:%@", savedDictionary2);

    [savedDictionary2 writeToFile:dictionaryPath3 atomically:YES];

, когда я смотрю в папку с документами, у меня есть файл с именем 1dictionary, когда я открываю его с выходом текста, он выглядит так:

<key>identity</key>
<string>name.txt</string>
<key>numberkey</key>
<string>imagename.txt</string>
<key>photoimagekey</key>
<string>image.jpg</string>
<key>pictureAudioKey</key>
<string>audio.caf</string>

Я сейчас пытаюсь загрузить словарь в операторе if, подобном этому.

if ((int)index == 0) {

      FinalDetailViewController *detailViewController = [[FinalDetailViewController alloc] initWithNibName:@"FinalDetailViewController" bundle:nil];


        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   
                                                             NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        //Get a full path to the image in the documents directory.
        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:@"1dictionary"];

        NSDictionary *myDictionary = [NSDictionary dictionaryWithContentsOfFile:fullPath];
        NSMutableDictionary *familyDictionary =[[NSMutableDictionary alloc]initWithDictionary:myDictionary];
        /*NSMutableDictionary *familyDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                                 @"audio.caf",@"pictureAudioKey",
                                                 @"image.jpg",@"photoimagekey",
                                                 @"name.txt", @"identity", 
                                                 @"imagename.txt",@"numberkey",nil];*/

        detailViewController.familyDictionary = familyDictionary;

         [self.navigationController pushViewController:detailViewController animated:YES];
    }

, но он не работает, приложение завершает работу с

* Завершениеприложение из-за необработанного исключения 'NSInvalidArgumentException', причина: '* - [NSURL initFileURLWithPath:]: строковый параметр nil'

Есть идеи, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 02 марта 2014

Путь к файлу вы собираете по-разному в методе сохранения и загрузки.Я думаю, что вам не хватает [dictionaryPath stringByAppendingFormat: @ "dictionary"] из пути загрузки файла.Тогда исключение выдается на [NSDictionary dictionaryWithContentsOfFile:fullPath];

0 голосов
/ 14 марта 2012

Проблема в том, что вы ссылаетесь на текстовое поле в viewDidUnload. На данный момент мнение и его подпредставления исчезли. Вы должны попробовать этот код в -viewWillDisappear:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...