2012-06-01 82 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

相關問題