我需要在我的应用程序中使用RegexKitlite作为字符串验证的一部分。 还添加了libicucore.A.dylib。 目前正在使用xcode 4.2,Base sdk iOS 5.0,Apple LLVM编译器3.0,architechture armv7。 将regexkit文件夹添加到我的应用程序会导致太多错误,例如 自动引用计数错误, 将Objective-C指针类型'NSString *'转换为C指针类型'CFStringRef'等
请帮助;我哪里出错了。
答案 0 :(得分:34)
您也可以通过添加标志来禁用RegexKitLite的ARC:
选择项目 - >你的目标 - >在Tab上“Build Phases”并打开“Compile Sources”并为“RegexKitLite.m”添加标志“-fno-objc-arc”。
更新: 如果你得到:
未定义的符号: “_uregex_reset”,引自: RegexKitLite.o中的_rkl_splitArray RegexKitLite.o中的_rkl_replaceAll “_uregex_appendTail”,引自:.......
然后你需要添加标签“Build Settings” - > “链接” - > “其他链接标志”是“-licucore”
答案 1 :(得分:0)
你没有做错任何事。 Regexkit尚未更新到iOS 5。 iOS 5的重大变化是不再有保留,发布或自动释放。每个内存都像Java一样自动化。 (除了它发生在编译时而不是运行时。所以它在概念上就像Java。主要是。)
无论如何,您可以使用NSRegularExpression而不是等待Regexkit更新。使用Apple的东西也是面向未来的,因为他们将自己的东西更新版本到版本。
祝你好运!答案 2 :(得分:0)
CBGraham是对的。或者,您可以禁用自动引用计数(项目>构建设置>搜索'自动引用计数')。
您显然必须进行手动引用计数,但RegexKitLite现在应该构建...
答案 3 :(得分: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;
}