考えられる解決策は、サブクラスNSString
化して の独自の実装を提供することです-fileSystemRepresentation
が、残念ながらNSString
はクラス クラスタであるため、サブクラス化が非常に困難です (Apple のドキュメントでも推奨されていません)。
ただし、 を装う別のクラスを作成できますNSString
が、 の独自の実装を提供します-fileSystemRepresentation
。
NSTask
ただし、これは、引数オブジェクトのクラス ID に何かを行うと、問題を引き起こす可能性があります。現在、これが事実であるという証拠はありません — この回避策は完全に機能しているようです。
ヘッダ:
// 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