2014-05-01 61 views
0

我试图将环境变量替换为一个字符串,但是我被regularExpresionWithPattern停滞了。将环境变量替换为NSString

我发现了另一个问题,一些代码,似乎回答别人的问题,但因为种种原因,并没有为我工作:

NSString *substituteVariables(NSString *input) { 
    NSDictionary *environment = [[NSProcessInfo processInfo] environment]; 

    NSError *error = nil; 
    // I know this pattern isn't good enough, but it's a start! 
    NSRegularExpression *regex = [NSRegularExpression 
     regularExpressionWithPattern:@"$([A-Z_]+)" 
     options:NSRegularExpressionCaseInsensitive error:&error]; 
    return [regex stringByReplacingMatchesInString:input options:0 
        range:NSMakeRange(0, input.length) 
        usingBlock:^NSString *(NSTextCheckingResult *result, 
             NSMatchingFlags flags, BOOL *stop) { 
     NSString *envKey = [input substringWithRange:[result rangeAtIndex:1]]; 
     return [environment objectForKey:envKey]; 
    }]; 
}; 

这会产生一个编译器警告这在很大程度上表明,码赢没有工作:

appbundler/native/main.m:64:19: warning: instance method '-stringByReplacingMatchesInString:options:range:usingBlock:' not found (return type defaults to 'id') [-Wobjc-method-access] 
    return [regex stringByReplacingMatchesInString:input options:0 range:NSMakeRange(0, input.length) usingBlock:^NSString *(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSRegularExpression.h:25:12: note: receiver is instance of class declared here 
@interface NSRegularExpression : NSObject <NSCopying, NSCoding> { 
     ^
1 warning generated. 

虽然代码有望与10.7 SDK一起工作,但我正在针对OS 10.8 SDK进行构建。

我检查了文档,并且确实在文档中不存在此方法。然而,它以某种方式为别人工作,我不明白为什么。

回答

1

如果某人成功使用了一种方法,但它不在SDK中,他们必须添加了一个类别。我注意到这个问题有一个确切的方法:Is this a sane Objective-C Block Implementation?

+0

orz所以它毕竟是一个自定义的方法。我不是特别想要这个代码库膨胀,所以我可能只是内联。 – Trejkaz