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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |