首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用NSTask和NSPredicate?

如何使用NSTask和NSPredicate?
EN

Stack Overflow用户
提问于 2015-10-25 18:49:04
回答 1查看 238关注 0票数 0

我想通过NSTask: mv /User/xxx.deb /User/Docs运行这个命令,将deb文件移动到/User/Docs。但是,deb文件可以有许多名称: blah.deb、blah3.deb、hgfdo.deb、6745sdjiz.deb、...

下面是我当前的代码:

代码语言:javascript
复制
#import <Foundation/NSTask.h>

NSString *myString = @"deb";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString];
NSTask *task = [[[NSTask alloc] init] autorelease];
[task setLaunchPath:@"/bin/mv"];
[task setArguments:[NSArray arrayWithObjects:[NSString stringWithFormat:@"/User/%@", predicate], @"/User/Tweak/", nil]];
[task launch];

这是行不通的。没有NSPredicate,它就能工作:

代码语言:javascript
复制
[task setArguments:[NSArray arrayWithObjects:@"/User/com.deb", @"/User/Tweak/", nil]];

但我需要使用NSPredicate (或任何其他方法)

你有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-10-25 19:58:37

NSPredicate应该用于评估Objective-C对象(NSArrays、NSStrings等)。我会使用类似这样的东西:

代码语言:javascript
复制
[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSURL URLWithString:@"/User/"] includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil]

要获取一个数组,请将/User/中的所有文件。

然后使用带有NSPredicate的NSArray的filteredArrayUsingPredicate:(与您的略有不同,但类似于SELF.pathExtension == %@)。

您将得到一个与您的谓词匹配的NSURL数组。您只需将它们转换为路径并将您的/Tweak/文件夹添加到数组中。将其用作任务的参数。

当然,如果你只是想移动一些文件,你不需要使用NSTask。NSFileManager具有将NSURL数组从一个目录移动到另一个目录的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33328816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档