2012-06-01 116 views
1

我在XCode中显示错误文件::告诉(),使用Unrar4iOS框架,当我打电话的方法:Unrar4iOS错误,File :: tell()抛出asm代码,我该怎么办?

-(NSArray)unrarListFiles; 

编译器让我看到了一堆错误,其中从堆栈中的最后是FTELL,如果有人知道,如果在那里probabily我错了,普莱舍答复... 全过程我想要做的是extrat归档文件的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; 

回答

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; 

}

0

我认为这是Unrar4iOS中的一个错误,它是通过读取一个损坏的RAR档案(或一个不是RAR ar的文件韭菜在所有)。它尝试读取磁盘上不属于存档的地址,并引发EXC_BAD_ACCESS (SIGSEGV)。我张贴这在GitHub的项目的问题:https://github.com/ararog/Unrar4iOS/issues/6

马特·加拉格尔在Cocoa with Love写了一篇文章,显示如何尽量很好地呈现错误给用户,但代码应该使用,让您的应用程序运行,因为它可能有不可预测的结果。

更新:对于它的价值,我分叉Unrar4iOS到一个新的项目,UnrarKit,使用NSError而不是抛出异常,其处理错误。

+0

我已经找到了问题,但我无法解决这个问题,我remaked UNRAR4IOS对象,以便只是它返回我扔了,并在try语句我的错误! – Florik

+0

Cocoa没有办法捕获unix信号,比如'SIGSEGV'。 – Dov

+0

你应该重写unrar4iOS方法提取物流: – Florik

相关问题