2015-02-21 3 views
1

Мои загрузки приложений при запуске базы данных sqlite около 300 МБ. После завершения загрузки эта база данных sqlite должна быть доступна во время установки приложения (лет :-)). Я не знаю, где хранить эти файлы.Где хранить большие файлы, извлеченные изначально в приложении IOS

Я начал хранить данные в пути к библиотеке как наблюдения (СВИФТ)

var sDataPath = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true); 

Нет, я понимаю, что этот путь меняется в процессе разработки и тестирования с IOS Simulator. Пример: 1. Я запускаю приложение в первый раз в OIS Simulator. Оцененный путь:

[/Users/user/Library/Developer/CoreSimulator/Devices/19E2CB7E-3ABB-4C0A-8B49-39A0BE392A93/data/Containers/Data/Application/5EE51B55-0A89-45FB-A1E2-9BE3DCD33463/Library] 

2. Приложение загружает данные. Это занимает несколько минут. 3. Я закрываю симулятор и перезапускаю также xcode 4. Я снова запускаю приложение в симуляторе и ожидаю, что уже загрузил данные в путь к библиотеке моих приложений. Но нет ... 5. приложение вычисляет новый путь, который имеет другой идентификатор в поле Путь:

[/Users/user/Library/Developer/CoreSimulator/Devices/19E2CB7E-3ABB-4C0A-8B49-39A0BE392A93/data/Containers/Data/Application/429206E9-00EA-45EF-BE6E-4B2E9374BAF5/Library] 

6. И приложение загружает содержимое снова.

Я хотел бы иметь статический путь на протяжении всего срока службы устройства. Что я делаю неправильно или что я должен изменить?

ответ

2

Путь меняется на симуляторе, но он будет таким же на реальном устройстве.

Если я не ошибаюсь, на симуляторе путь меняется каждый раз, когда вы его перезапускаете. На устройстве путь изменится, только если вы удалите и переустановите приложение.

+0

Спасибо за великолепное объяснение. Поэтому, если мне придется загружать большой файл каждый раз, у меня будет проблема. Есть ли умный способ обрабатывать/тестировать одно и то же приложение в симуляторе и на реальном устройстве. Я имею в виду, должен ли я обнаруживать код, если симулятор запущен, и установить статический путь. Какова общая оценка этой ситуации? –

+0

Я не понимаю, потому что путь к вашей песочнице не имеет значения. путь по отношению к вашим собственным корням ваших приложений всегда будет равен –

+0

. Я не понимаю. Мой вопрос.Как мне получить путь (без выполнения статической строки самостоятельно), который всегда один и тот же, даже я перезапускаю свой mac. Поэтому в конце симулятор найдет мои файлы снова, после того, как он был загружен в первый сеанс. В противном случае тестирование будет означать, что каждый запуск будет загружен в течение 3 минут. –

0

Вы должны сохранить загруженное изображение в каталог документов. Таким образом, изображения могут загружаться быстро. Если u хочет преодолеть перезагрузку ячейки, тогда вам нужно проверить, есть ли путь к файлу, есть ли заполнение или нет.

- (NSString *)documentsPathForFileName:(NSString *)name folder:(NSString*)folderName{ 
    return [[self pathToPatientPhotoFolder:folderName] stringByAppendingPathComponent:name]; 
} 

- (NSString *)pathToPatientPhotoFolder:(NSString *)folderName { 
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                    NSUserDomainMask, 
                    YES) lastObject]; 
    NSString *patientPhotoFolder = [documentsDirectory stringByAppendingPathComponent:folderName]; 

    // Create the folder if necessary 
    BOOL isDir = NO; 
    NSFileManager *fileManager = [[NSFileManager alloc] init]; 
    if (![fileManager fileExistsAtPath:patientPhotoFolder 
         isDirectory:&isDir] && isDir == NO) { 
     [fileManager createDirectoryAtPath:patientPhotoFolder 
      withIntermediateDirectories:NO 
          attributes:nil 
           error:nil]; 
    } 
    return patientPhotoFolder; 
} 

в вашем cellForRowAtIndexPath: метод

{….. 

NSURL *urla = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[self.imagearray objectAtIndex:indexPath.item]]]; 
    NSString *thumbnailCacheKey = [NSString stringWithFormat:@"thumb-%@",[self.imageIDarray objectAtIndex:indexPath.item]];; 
    UIImage *image = [UIImage imageWithContentsOfFile:[self documentsPathForFileName:thumbnailCacheKey folder:@"thumb"]]; 

if (!image){ 
    //first download image here and then save that image like: 
    NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"thumb"]; 
    // New Folder is your folder name 
    NSError *error = nil; 
      if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath]) 
       [[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:&error]; 

      NSString *filePath = [stringPath stringByAppendingPathComponent:thumbnailCacheKey]; 
      NSData *pngData = UIImageJPEGRepresentation(image, 0.8); 
       [pngData writeToFile:filePath atomically:YES]; 
} 
else{// image is already downloaded, so just set that image 
    cell.imageView.image = image; 
} 
…. 
} 

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

+0

Проблема остается тем же самым. Путь изменяется после нового перезапуска. По крайней мере, после перезагрузки mac. Таким образом, я не могу тестировать свое приложение, когда оцениваемый путь меняется каждый раз. –

+0

вы пробовали? В моем коде я не сохранен с фиксированным путем. Просто добавьте два метода и примените одинаковый код. –

0

Вы должны сохранить его в папке Cache.

NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; 
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"file.plist"]; 

магазин большой файл в другой каталог будет отвергнут командой обзора Apple App (как я столкнулся)

+0

Моя база данных sqlite должна храниться в течение всего времени установки приложения. Поэтому я не думаю, что каталог кеша будет хорошим местом. Даже это, путь меняется при каждом запуске симулятора. –

Смежные вопросы