gpt4 book ai didi

objective-c - 如何解决 NSTask 调用 -[NSString fileSystemRepresentation] 作为参数

转载 作者:太空狗 更新时间:2023-10-30 03:52:36 24 4
gpt4 key购买 nike

似乎 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

关于objective-c - 如何解决 NSTask 调用 -[NSString fileSystemRepresentation] 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com