0

コンテンツが頻繁に変更されるサーバーからの画像を表示するテスト アプリがあるため、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。それはうまくいきます。

4

1 に答える 1

0

私はあなたのコードをテストしました...そして私にとってはうまくいきます...主な変更点:代わりに:

ZipArchive *za = [[ZipArchive alloc] init];
              if ([za UnzipOpenFile: zipPath]) {
                  BOOL ret = [za UnzipFileTo: cachePath overWrite: YES];
                  if (NO == ret){
                  }
                  [za UnzipCloseFile];

私は使用しています

[SSZipArchive unzipFileAtPath:zipPath toDestination:cachePath];

ディレクトリの内容を一覧表示できます (解凍後):

 NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:cachePath error:&error];
                NSLog(@"DIR folder : %@",directoryContents);

ここで、コードに基づいた私のデモ プロジェクトを確認できますhttps://dl.dropboxusercontent.com/u/19438780/testSSZipArchive.zip

アップデート

私が持っている私のzipファイルでテストします:

(
    "__MACOSX",
    "Archive.zip",
    "error feedly.txt",
    "image1.jpg",
    "image2.jpg",
    "image3.jpg",
    "image4.jpg",
    "Tony-M.testSSZipArchive"
)
于 2014-01-23T11:29:37.630 に答える