2011-10-18 76 views
8

我需要在我的應用程序中使用RegexKitlite作爲字符串驗證的一部分。 還添加了libicucore.A.dylib。 目前正在使用xcode 4.2,Base sdk iOS 5.0,Apple LLVM編譯器3.0,architechture armv7。 添加regexkit文件夾到我的應用程序,導致過多的錯誤,如 自動引用計數錯誤, 演員Objective-C的指針型「的NSString *」到C指針類型「CFStringRef」等IOS5中的RegexKitLite

請幫幫忙,我在哪裏出錯了。

回答

0

你沒有做錯任何事。 Regexkit還沒有更新到iOS 5。 iOS 5的重大變化是不再保留,發佈或自動發佈。每個記憶事物都像Java一樣自動化。 (除了它發生在編譯時而不是運行時,所以它在概念上類似於Java,主要是)

無論如何,不​​要等待Regexkit更新,您可以使用NSRegularExpression。使用蘋果的東西也是未來的保證,因爲他們保持自己的東西更新版本的版本。

祝你好運!

+0

它不像Java的)就像...根本 –

0

CBGraham是對的。或者,您可以禁用自動引用計數(「項目」>「構建設置」>搜索「自動引用計數」)。

你顯然需要做的手工引用計數,但現在RegexKitLite應該建立...

33

也只能通過增加一個標誌禁用的RegexKitLite的ARC:

選擇項目 - >您的目標 - >在選項卡上的「構建階段」並打開「編譯源」並添加「RegexKitLite.m」標誌「-fno-objc-arc」。

更新: 如果你得到:

未定義的符號: 「_uregex_reset」,從引用:在RegexKitLite.o 「_uregex_appendTail」,從引用的RegexKitLite.o _rkl_replaceAll _rkl_splitArray:.... ...

然後,你需要在選項卡中添加「生成設置」 - >「鏈接」 - >「其他鏈接器標記」的「-licucore」

+0

就像一個魅力...... – emreoktem

+0

在現代次,你應該去圖書館鏈接二進制文件,並添加「libicucore.dylib」 – seo

0

我換成RegexKitLite與有兩種方法。

字符串結果:

+(NSString*) regExString: (NSString *) pattern withString: (NSString *) searchedString { 
    NSError *error = nil; 
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error]; 
    NSTextCheckingResult *match = [regex firstMatchInString:searchedString options:0 range: NSMakeRange(0, [searchedString length])]; 
    if ([searchedString substringWithRange:[match rangeAtIndex:1]]) { 
     return [searchedString substringWithRange:[match rangeAtIndex:1]]; 
    } else { 
     return @""; 
    } 
} 

結果的數組:

+(NSArray *) regExArray:(NSString *) pattern withString: (NSString *) searchedString { 
    NSMutableArray *results = [[NSMutableArray alloc] init]; 
    NSError *error; 
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error]; 
    NSArray* matches = [regex matchesInString:searchedString options:0 range: NSMakeRange(0, searchedString.length)]; 

    for (NSTextCheckingResult* match in matches) { 
     NSMutableArray *result = [NSMutableArray array]; 
     NSRange matchRange = [match range]; 
     NSString *numString = [searchedString substringWithRange:matchRange]; 
     [result addObject:numString]; 

     for (int i=1;i < (int)match.numberOfRanges;i++) { 
      NSRange range = [match rangeAtIndex:i]; 
      @try { 
       NSString *numString = [searchedString substringWithRange:range]; 
       [result addObject:numString]; 
      } 
      @catch (NSException *exception) { 
       [result addObject:[NSNull null]]; 
      } 
     } 
     [results addObject:result]; 
    } 
    return results; 
}