一种可能的解决方案是子类NSString
化并提供您自己的实现-fileSystemRepresentation
,但不幸的是,它NSString
是一个类集群,因此很难子类化(Apple 的文档也不鼓励这样做)。
但是,我们可以创建一个单独的类,该类伪装成NSString
,但提供了自己的 实现-fileSystemRepresentation
。
但是,如果NSTask
对参数对象的类标识做任何事情,这可能会产生问题。目前我没有证据表明是这种情况——这种解决方法似乎很有效。
标题:
// MYTaskArgument.h
@interface MYTaskArgument : NSObject
+ (instancetype) taskArgumentWithString:(NSString *)str;
@end
执行:
// MYTaskArgument.m
@interface MYTaskArgument ()
@property(copy) NSString *string;
@end
@implementation MYTaskArgument
+ (instancetype) taskArgumentWithString:(NSString *)str {
MYTaskArgument *ret = [[MYTaskArgument alloc] init];
ret.string = str;
return ret;
}
- (const char *) fileSystemRepresentation {
return self.string.UTF8String;
}
- (id) forwardingTargetForSelector:(SEL)aSelector {
return self.string;
}
@end