2011-10-18 15 views
8

Potrzebuję RegexKitlite w mojej aplikacji jako część sprawdzania ciągów. Dodałem również libicucore.A.dylib. Obecnie pracuje z xcode 4.2, Base sdk iOS 5.0, Apple LLVM kompilator 3.0, architechture armv7. Dodawanie folderu regexkit do mojej aplikacji, powoduje zbyt wiele błędów jak Automatic Reference Counting błędów Obsada Objective-C typu wskaźnika „NSString *” do C typu wskaźnika „CFStringRef” etcRegexKitLite w IOS5

Proszę o pomoc; Gdzie ja poszło źle.

Odpowiedz

0

Nie robisz nic złego. Regexkit nie został jeszcze zaktualizowany do systemu iOS 5. Dużą zmianą w systemie iOS 5 jest brak zatrzymywania, wydań lub autoreleaseów. Każda pamięć jest automatyczna jak Java. (Z wyjątkiem tego, że dzieje się to w czasie kompilacji, a nie w czasie wykonywania, więc jest konceptualnie podobny do Java.) W większości.)

W każdym razie, zamiast czekać na aktualizację Regexkita, można użyć NSRegularExpression. Używanie produktów Apple jest również rozwiązaniem przyszłościowym, ponieważ zachowują one własną wersję zaktualizowaną do wersji.

Powodzenia!

+0

to nie jest jak Java;) jak ... nie na wszystkie –

0

CBGraham ma rację. Ewentualnie możesz wyłączyć automatyczne liczenie odwołań (Projekt> Ustawienia kompilacji> wyszukaj "automatyczne liczenie odwołań").

Będziesz oczywiście musiał zrobić ręcznego liczenia odniesienia, ale RegexKitLite powinna budować teraz ...

33

Można również wyłączyć ARC dla RegexKitLite tylko dodając flagę:

wybierz projekt -> TWÓJ cel -> na karcie "Fazy budowania" i otwórz "Źródła kompilacji" i dodaj "RegexKitLite.m" flagę "-fno-objc-arc".

Aktualizacja: Jeśli masz:

Niezdefiniowane symbole: "_uregex_reset" odwołuje od: _rkl_splitArray w RegexKitLite.o _rkl_replaceAll w RegexKitLite.o "_uregex_appendTail", odwołuje się od: .... ...

Następnie trzeba dodać w zakładce "Build Settings" -> "Łączenie" -> "inne flagi linker" the "-licucore"

+0

działa jak czar ... – emreoktem

+0

W nowoczesnym razy, powinieneś przejść do Link Binary z bibliotekami i dodać "libicucore.dylib" – seo

0

Wymieniłem RegexKitLite tam z dwóch metod.

Wyniki wyrażenie:

+(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 @""; 
    } 
} 

tablicę wyników:

+(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; 
} 
Powiązane problemy