【发布时间】:2015-06-03 21:28:21
【问题描述】:
所以在我的应用程序中,我有一个表格视图。如果文件是 deb,它会要求安装,按安装,然后它会将我带到一个显示安装的视图控制器,类似于 iFile 和 Cydia(输出没有那么迷人,哈哈)。
在这方面一切都很好。它安装。然而。如果文件名称中有空格,即random File.deb,则会失败。我注意到 iFile 已经弄清楚了,尝试联系他们,看看他们是否可以就情况告诉我,但还没有回复。
我该如何逃离这个空间?或者让它看起来像 dpkg 不在乎它的存在?
这就是我调用和执行安装的方式。
MyDownloadsViewController * vc = [[MyDownloadsViewController alloc] init];
vc.fileName = debName;
// Get documents folder
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [paths objectAtIndex:0];
path = [[@"~/Documents/myFolder" stringByExpandingTildeInPath] retain];
NSString *debPath = [path stringByAppendingPathComponent:vc.fileName];
//NSTask
NSTask *task = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];
[task setLaunchPath: myLaunchPath];
[task setArguments: [NSArray arrayWithObjects:@"/usr/bin/dpkg", @"-i", debPath, @"2>/tmp/dpkg.log" ,nil]];
[task setStandardOutput: pipe];
[task launch];
我尝试过使用:
[filename stringByReplacingOccurrencesOfString:@" " withString:@""]
在下载中发送文件和在输出视图控制器中接收文件。它要么失败,要么应用崩溃。
我也试过了:
if ( [fileName rangeOfString:@" "].location != NSNotFound ) {
appendedFile = [path stringByReplacingOccurrencesOfString:@" " withString:@""];
}
判断文件是否有空格,如果没有则正常进行。这会以同样的方式产生一些不需要的结果,而且它会安装表格视图中最后一个 deb 的内容。
使用 2 个 NSTask 会更好吗? 1解压,2配置?我试过了,但它不会进入第二个任务,或者它仍然会看到第一个正在运行并锁定 dpkg。
任何见解或知识将不胜感激。
【问题讨论】:
-
你不能使用
2>/tmp/dpkg.log作为NSTask的参数,因为这个参数应该被shell解释,而不是dpkg。 NSTask 不会自动解释类似 shell 的语法,如|或>! -
dpkg.log 是我的表视图打开时创建的日志文件。一旦一个 deb 被点击安装,它就会读取打印到该日志文件的输出。这可能不是一种“正确”的方式,但它适用于我正在做的事情。