RegexKitLite в IOS5 - PullRequest
       2

RegexKitLite в IOS5

8 голосов
/ 18 октября 2011

Мне нужно RegexKitlite в моем приложении как часть проверки строки.Также добавили libicucore.A.dylib.В настоящее время работает с xcode 4.2, Base SDK iOS 5.0, компилятор Apple LLVM 3.0, architechture armv7.Добавление папки regexkit в мое приложение вызывает слишком много ошибок, таких как ошибки автоматического подсчета ссылок, приведение типа указателя Objective C 'NSString *' к типу указателя C 'CFStringRef' и т. Д.

Пожалуйста, помогите, куда я пошелнеправильно.

Ответы [ 4 ]

34 голосов
/ 14 марта 2012

Вы также можете отключить ARC для RegexKitLite, только добавив флаг:

выберите проект -> ВАША Цель -> на вкладке «Фазы сборки», откройте «Исходники компиляции» и добавьте для «RegexKitLite.m» флаг «-fno-objc-arc».

Обновление: Если вы получаете:

Неопределенные символы: "_uregex_reset", ссылка с которого: _rkl_splitArray в RegexKitLite.o _rkl_replaceAll в RegexKitLite.o "_uregex_appendTail", по ссылке от: .......

Затем необходимо добавить во вкладку «Настройки сборки» -> «Связывание» -> «Другие флаги компоновщика» «-licucore»

0 голосов
/ 06 октября 2015

Я заменил 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;
}
0 голосов
/ 06 декабря 2011

CBGraham прав. Кроме того, вы можете отключить автоматический подсчет ссылок («Проект»> «Настройки сборки»> «автоматический подсчет ссылок»).

Вы, очевидно, должны будете выполнить ручной подсчет ссылок, но RegexKitLite должен собрать сейчас ...

0 голосов
/ 10 ноября 2011

Вы не делаете ничего плохого. Regexkit просто еще не был обновлен до iOS 5. Большое изменение в iOS 5 - больше нет сохранений, выпусков или авто-выпусков. Каждая вещь памяти автоматическая, как Java. (За исключением того, что это происходит во время компиляции, а не во время выполнения. Так что это концептуально как Java. В основном.)

В любом случае, вместо ожидания обновления Regexkit, вы можете использовать NSRegularExpression. Использование вещей Apple также ориентировано на будущее, так как они сохраняют свои вещи обновленными от версии к версии.

Удачи!

...