1

メソッドを呼び出しているときに、Unrar4iOS フレームワークを使用して、XCode にエラー File::tell() が表示されます。

-(NSArray)unrarListFiles;

コンパイラは私に一連のエラーを表示します。スタックからの最後のものは ftell です。誰かが知っている場合は、おそらく私が間違っている場合は起源を教えてください。返信してください...私がやりたい完全な手順は、int 番号を抽出することです。以下のコードから、アーカイブされたファイルの数:

int nuberOfPages = 0;
NSLog(@"Filepath: %@", filePath);
Unrar4iOS *_unrar = [[Unrar4iOS alloc] init];
BOOL ok = [_unrar unrarOpenFile:filePath];
if (ok) {

    NSArray *files = [_unrar unrarListFiles];
    for (NSString *filename in files) {
        NSLog(@"File: %@", filename);
    }
    nuberOfPages = files.count;

    [unrar unrarCloseFile];
} else {
    [unrar unrarCloseFile];
}
[_unrar release];
return nuberOfPages;
4

2 に答える 2

1

これはそれが理由です。ソースコードで。

-(BOOL) unrarOpenFile:(NSString*)rarFile



-(BOOL) unrarCloseFile

上記の機能。彼らは何もしませんでした。

この関数は実際に開いたり閉じたりします。

-(NSArray *) unrarListFiles {
int RHCode = 0, PFCode = 0;

    //here  if you opened a file that is not rar.
    //this function RARReadHeaderEx will EXC_BAD_ACCESS (SIGSEGV)
    //so, you can check it return value
[self _unrarOpenFile:filename mode:RAR_OM_LIST];

NSMutableArray *files = [NSMutableArray array];
while ((RHCode = RARReadHeaderEx(_rarFile, header)) == 0) {
    NSString *_filename = [NSString stringWithCString:header->FileName encoding:NSASCIIStringEncoding];
    [files addObject:_filename];

    if ((PFCode = RARProcessFile(_rarFile, RAR_SKIP, NULL, NULL)) != 0) {
        [self _unrarCloseFile];
        return nil;
    }
}

[self _unrarCloseFile];
return files;

}

于 2012-07-26T07:11:55.897 に答える
0

Unrar4iOSこれは、破損したRARアーカイブ(またはRARアーカイブではないファイル)を読み取ることによって引き起こされるバグだと思います。アーカイブの一部ではないディスク上のアドレスを読み取ろうとし、をスローしEXC_BAD_ACCESS (SIGSEGV)ます。これをGitHubプロジェクトの問題として投稿しました:https ://github.com/ararog/Unrar4iOS/issues/6

Matt Gallagherは、Cocoa with Loveについて、ユーザーにエラーを適切に提示する方法を示す記事を書きましたが、予測できない結果が生じる可能性があるため、このコードを使用してアプリケーションを実行し続けることはできません

更新:その価値のために、私はUnrar4iOSを新しいプロジェクトUnrarKitにフォークしました。このプロジェクトは、例外NSErrorをスローする代わりにを使用してエラーを処理します。

于 2012-07-09T23:46:44.233 に答える