我在调用方法时使用Unrar4iOS Framework在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;
答案 0 :(得分: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;
}
答案 1 :(得分:0)
我认为这是Unrar4iOS
中的一个错误,它是通过读取损坏的RAR存档(或根本不是RAR存档的文件)触发的。它尝试读取磁盘上不属于归档的地址,并抛出EXC_BAD_ACCESS (SIGSEGV)
。我在GitHub项目中将其作为一个问题发布:https://github.com/ararog/Unrar4iOS/issues/6
Matt Gallagher写了一篇关于Cocoa with Love的文章,展示了如何尝试向用户很好地呈现错误,但该代码应该不用于保持应用程序运行,因为它可能有不可预知的结果。
更新:为了它的价值,我将Unrar4iOS分成了一个新项目UnrarKit,它使用NSError
处理错误而不是抛出异常。