加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何解决NSTask调用 – [NSString fileSystemRep

发布时间:2020-12-16 05:04:58 所属栏目:百科 来源:网络整理
导读:似乎NSTask调用 – [NSString fileSystemRepresentation]来为你给它的每个参数编码值. 在某些情况下,由于-fileSystemRepresentation使用分解的unicode形式进行编码,这可能会成为一个问题:例如,a-umlaut(?)将编码为U 0061(拉丁文小写字母a)和U 0308(组合分音
似乎NSTask调用 – [NSString fileSystemRepresentation]来为你给它的每个参数编码值.

在某些情况下,由于-fileSystemRepresentation使用分解的unicode形式进行编码,这可能会成为一个问题:例如,a-umlaut(?)将编码为U 0061(拉丁文小写字母a)和U 0308(组合分音符),而不是U 00E4(带有分音符的拉丁文小写字母a).另一方面,-UTF8String方法似乎正好相反.

我需要使用组合表单对我的NSTask参数进行编码.我该如何解决这个问题?

解决方法

一个可能的解决方案是子类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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读