iPhone: может иметь доступ к файлам в каталоге документов в Simulator, но не к устройству - PullRequest
0 голосов
/ 26 марта 2010

Я пишу приложение, которое копирует некоторое содержимое пакета в каталог документов приложения, в основном изображения и мультимедиа. Затем я получаю доступ к этому носителю по всему приложению из каталога Документа.

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

Есть идеи? Спасибо!

EDIT

Вот код, который копирует в каталог Документа

NSString *pathToPublicationDirectory = [NSString stringWithFormat:@"install/%d",[[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]];
    NSString *manifestPath = [[NSBundle mainBundle] pathForResource:@"content" ofType:@"xml" inDirectory:pathToPublicationDirectory];
    [self parsePublicationAt:manifestPath];

    // Get actual bundle path to publication folder
    NSString *bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:pathToPublicationDirectory];
    // Then build the destination path
    NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d", [[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]]];

    NSError *error = nil;
    // If it already exists in the documents directory, delete it
    if ([fileManager fileExistsAtPath:destinationPath]) {
        [fileManager removeItemAtPath:destinationPath error:&error];
    }
    // Copy publication folder to documents directory
    [fileManager copyItemAtPath:bundlePath toPath:destinationPath error:&error];

Я выясняю путь к каталогу документации с помощью этого метода:

- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

}

А вот пример того, как я строю путь к изображению

path = [NSString stringWithFormat:@"%@/%d/%@", [self applicationDocumentsDirectory], [[thisItem valueForKey:@"publicationID"] intValue], [thisItem valueForKey:@"coverImage"]];

Ответы [ 3 ]

1 голос
/ 29 марта 2010

Это оказалось проблемой, когда пакет не обновлялся на устройстве и, по-видимому, не имел того же набора файлов, что и симулятор. Это сообщение в блоге немного помогло: http://majicjungle.com/blog/?p=123

По сути, я очистил сборку и удалил приложение и установил сначала на устройство, а не на симуляторе. Интересные вещи.

0 голосов
/ 27 марта 2010

Ваш код копии выглядит нормально, и вы говорите, что не получаете ошибок.

Но меня заинтриговало "Активы просто обнуляются". Вы уверены, что позднее получаете доступ к имени файла с точным тем же именем?

В отличие от симулятора, настоящий iPhone имеет чувствительную к регистру файловую систему.

0 голосов
/ 27 марта 2010

Я не вижу, где определено documentsDirectory.

NSString *destinationPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d", [[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]]];

Возможно, следующее сделает свое дело

NSString *destinationPath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:[NSString stringWithFormat:@"%d", [[[manifest objectAtIndex:i] valueForKey:@"publicationID"] intValue]]];
...