2011-10-18 3 views
8

Ho bisogno di RegexKitlite nella mia app come parte della convalida di String. Hanno anche aggiunto libicucore.A.dylib. Attualmente funziona con xcode 4.2, base sdk iOS 5.0, Apple LLVM compilatore 3.0, architechture armv7. Aggiunta la cartella regexkit alla mia app, provoca troppi errori come automatico Riferimento errori di conteggio, Fusioni di Objective-C di tipo puntatore 'NSString *' per C tipo di puntatore 'CFStringRef' eccRegexKitLite in IOS5

Si prega di aiuto, dove ho io finito male.

risposta

0

Non stai facendo niente di male. Regexkit non è stato ancora aggiornato su iOS 5 ancora. Il grande cambiamento in iOS 5 è che non ci sono più conservazioni, rilasci o autoreleases. Ogni cosa di memoria è automatica come Java. (Tranne che avviene in fase di compilazione invece che in fase di esecuzione. Quindi è concettualmente come Java.)

In ogni caso, invece di aspettare che Regexkit aggiorni, è possibile utilizzare NSRegularExpression. L'uso di Apple è anche a prova di futuro dal momento che mantiene la propria versione aggiornata alla versione.

Buona fortuna!

+0

non è come Java;) Ti piace ... non a tutti i –

0

CBGraham ha ragione. In alternativa, è possibile disabilitare il conteggio dei riferimenti automatici (Progetto> Impostazioni di costruzione> cercare "conteggio automatico dei riferimenti").

Sarà, ovviamente, avere a che fare il conteggio di riferimento manuale, ma RegexKitLite dovrebbe costruire la società ...

33

È possibile anche disattivare l'ARC per l'RegexKitLite solo con l'aggiunta di una bandiera:

selezionare il progetto -> IL TUO Bersaglio -> sulla scheda "Fasi di costruzione" e apri "Fonti di compilazione" e aggiungi per "RegexKitLite.m" il flag "-fno-objc-arc".

Aggiornamento: Se si ottiene:

simboli non definiti: "_uregex_reset", fa riferimento a: _rkl_splitArray in RegexKitLite.o _rkl_replaceAll in RegexKitLite.o "_uregex_appendTail", si fa riferimento da: .... ...

allora avete bisogno di aggiungere nella scheda "Build Settings" -> "Collegamento" -> "Altre Bandiere linker" il "-licucore"

+0

funziona come un fascino ... – emreoktem

+0

Nella moderna volte, dovresti andare su Link Binary con Libraries e aggiungere "libicucore.dylib" – seo

0

ho sostituito RegexKitLite con là due metodi.

String Risultati:

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

Array dei risultati:

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