Сохранение данных - работает на симуляторе, а не на устройстве - PullRequest
1 голос
/ 21 апреля 2010

Я использую NSData для сохранения изображения в моем приложении. Я сохраняю изображение вот так (в моем приложении Delegate):

- (void)applicationWillTerminate:(UIApplication *)application
{
    NSLog(@"Saving data");

    NSData *data = UIImagePNGRepresentation([[viewController.myViewController myImage]image]);
    //Write the file out!

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"];

    [data writeToFile:path_to_file atomically:YES];
    NSLog(@"Data saved.");
}

и затем я загружаю его обратно так (в моем контроллере представления, под viewDidLoad):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"];

if([[NSFileManager defaultManager] fileExistsAtPath:path_to_file])
{
    NSLog(@"Found saved file, loading in image");
    NSData *data = [NSData dataWithContentsOfFile:path_to_file];

    UIImage *temp = [[UIImage alloc] initWithData:data];
    myViewController.myImage.image = temp;
    NSLog(@"Finished loading in image");
}

Этот код работает каждый раз на симуляторе, но на устройстве он никогда не загружается обратно в изображение. Я почти уверен, что это экономит, но у меня нет представления о файловой системе.

Я что-то странное делаю? У симулятора есть другой способ доступа к его каталогам, чем к устройству?

Спасибо!

1 Ответ

4 голосов
/ 03 мая 2010

Aha! Пригвоздил это!

Я пишу это так, чтобы кто-то другой, дергающий их за волосы, не сидел, уставившись на код, задаваясь вопросом, почему он не работает:)

Это проблемная строка:

NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"];

Это должно выглядеть так:

NSString *path_to_file = [documentsDirectory stringByAppendingPathComponent:@"lastimage.png"];

Причина этого в том, что без него вы получите что-то вроде /Files/Documentslastimage.png вместо /Files/Documents/lastimage.png, так как добавление компонента пути позаботится о слешах для вас. , Я надеюсь, что это поможет кому-то еще в будущем!

...