Почему мои данные успешно записываются в файл на симуляторе iPhone, а не на мое устройство? - PullRequest
3 голосов
/ 20 августа 2010

У меня есть следующий код, который сохраняет данные эскиза пользователя в файл ...

//Auto Save the sketch
NSString *filename = [NSString stringWithFormat:@"%@.png", sketchID];
CGImageRef imageRef = CGBitmapContextCreateImage(paintView.canvas.mBitmapContext);
UIImage* image = [[UIImage alloc] initWithCGImage:imageRef];
NSData* imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:filename atomically:YES];

CGImageRelease(imageRef);
[image release];

SketchID - уникальное буквенно-цифровое значение, поэтому пример имени файла, в который я сохраняюэто "p1.png".Код, который я использую для чтения файла: ...

//Load the sketch where the user left off, if there is one
if(fileName != nil)
{
    UIImage* image = [UIImage imageWithContentsOfFile:fileName];    

    if(image != nil)
    {
          .
          .

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

  1. Почему сохранение / загрузка файла работает на симуляторе, а не на устройстве?
  2. Когда я создаю имя файла, в котором хочу сохранить данныенужно ли также указывать путь к определенному каталогу на iPhone, где данные должны храниться правильно?Или "p1.png" должен работать нормально, когда я вызываю метод writeToFile:?А как насчет imageWithContentsOfFile: метода?

Ответы [ 2 ]

5 голосов
/ 20 августа 2010

Почему сохранение / загрузка файла работает на симуляторе, а не на устройстве?

Существует множество причин, но наиболее распространенной является попытка записи в местоположение, котороенедоступно для записи на устройстве, и наиболее распространенная причина для этого - запись в сам пакет приложений.

Все приложения iPhone «помещены в песочницу» на устройстве, что означает, что они не могут получить доступ к файловой системе вне каталогаприложение установлено в.

Когда я создаю имя файла, в которое я хочу сохранить данные, мне нужно также указать путь к определенному каталогу на iPhone, где данные должны быть правильнохранится?Или "p1.png" должен работать нормально, когда я вызываю метод writeToFile:?А как насчет imageWithContentsOfFile: метод?

Вы можете записать во временный каталог вашего приложения (если вам просто нужно временно разместить что-то во время выполнения) или в каталог документов (если вам нужно сохранитьчто-то более постоянное, а также резервное копирование iTunes).

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
0 голосов
/ 25 июня 2015

Я обнаружил, что симулятор очень прост в написании файлов, но устройства, конечно, нет. Моя проблема заключалась в том, что я неправильно создавал filePath, что симулятор не ловил. Симулятор должен был поймать это.

Вот мой неправильный и правильный код swift

docsDir!+"filename.dat" // wrong does not have path separator between dir and file
docsDir!.stringByAppendingPathComponent("filename.dat") // works since it puts the "/" in between the two.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...