Самый простой способ распаковать загруженный файл на iPhone? - PullRequest
1 голос
/ 24 марта 2010

Цель: скачать заархивированный файл, распаковать его и сохранить в каталоге документов приложения iPhone.

В следующем коде используется метод initWithGzippedData, который был добавлен к NSData в приложении Molecule, найденном здесь: http://www.sunsetlakesoftware.com/molecules

Как адаптировано к моему приложению:

NSString *sFolder = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *sFileName = [sFolder stringByAppendingPathComponent:@"MyFile.db"];
NSURL *oURL = [NSURL URLWithString: @"http://www.isystant.com/Files/MyFile.zip"];
NSData *oZipData = [NSData dataWithContentsOfURL: oURL];
NSData *oData = [[NSData alloc] initWithGzippedData:oZipData];
[oZipData release];
b = [oData writeToFile:sFileName atomically:NO];
NSLog(@"Unzip %i", b);

Результат: ZIP-файл успешно загружен. Из него создается новый, предположительно разархивированный файл в каталоге Documents с желаемым именем (MyFile.db), но он имеет ноль байтов.

Кто-нибудь видит проблему? Или есть ли более простой способ разархивировать загруженный файл, чем тот, который используется в приложении Molecules?

Ответы [ 2 ]

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

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

Я основал код gzip-deflating в Molecules на этой категории NSData (код, который я скопировал в этот ответ ), предоставленной авторами вики CocoaDev. То, что вы хотите сделать, это использовать их -zlibDeflate реализацию, которая должна правильно распаковать Zip-файл.

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

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

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

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