コンテンツが頻繁に変更されるサーバーからの画像を表示するテスト アプリがあるため、ZipArchive の使用を開始しました。新しい画像名の明示的なリストを持たずに、アプリで画像を並べ替えて表示したい。(または、新しい画像の名前を含む XML ドキュメントを zip ファイルに含める必要があるかもしれません。) いずれにせよ、既知の画像をサーバー上の zip ファイルに追加して、それをアプリ。
元の zipfile.zip ファイルには、photo.png と text.txt の 2 つのファイルがあります。
それはうまくいきます。そこで、zipfile.zip をダウンロードしてサーバーにアップロードしました。もちろん、それでも機能しました。次に、それを解凍し、新しい画像を追加して、サーバー上で再圧縮しました。
更新された zipfile.zip には、photo.png、myphoto.png、および text.txt の 3 つのファイルが含まれています。
追加した画像 myphoto.png が見つかりません。私は何が欠けていますか?
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"http://www.icodeblog.com/wp-content/uploads/2012/08/zipfile.zip"];
NSError *error = nil;
NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];
if(!error) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
NSString *zipPath = [cachePath stringByAppendingPathComponent:@"zipfile.zip"];
[data writeToFile:zipPath options:0 error:&error];
if(!error) {
ZipArchive *za = [[ZipArchive alloc] init];
if ([za UnzipOpenFile: zipPath]) {
BOOL ret = [za UnzipFileTo: cachePath overWrite: YES];
if (NO == ret){
}
[za UnzipCloseFile];
// NSString *imageFilePath=[cachePath stringByAppendingPathComponent:@"photo.png"];
NSString *imageFilePath=[cachePath stringByAppendingPathComponent:@"myphoto.png"];
NSData *imageData = [NSData dataWithContentsOfFile:imageFilePath options:0 error:nil];
if (imageData) {
NSLog(@"found data");
} else {
NSLog(@"no data");
}
UIImage *img = [UIImage imageWithData:imageData];
NSString *textFilePath = [cachePath stringByAppendingPathComponent:@"text.txt"];
NSString *textString = [NSString stringWithContentsOfFile:textFilePath encoding:NSASCIIStringEncoding error:nil];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = img;
self.label.text = textString;
});
}
} else {
NSLog(@"Error saving file %@",error);
}
} else {
NSLog(@"Error downloading zip file: %@", error);
}
});
}
これを実行して追加した画像を探すと、「データなし」が返されます。なんで?さらに大きな問題は、iOS アプリで、解凍されたファイルの内容を一覧表示できるかどうかです。
私はこのコードに言及しているこの質問でこのプロジェクトを開始しました: SSZipArchive。それはうまくいきます。