2011-10-18 28 views
8

Tôi cần RegexKitlite trong Ứng dụng của tôi như một phần của Xác thực chuỗi. Bạn cũng đã thêm libicucore.A.dylib. Hiện đang làm việc với xcode 4.2, Base sdk iOS 5.0, trình biên dịch LLVM của Apple 3.0, kiến ​​trúc armv7. Thêm thư mục regexkit để ứng dụng của tôi, gây ra quá nhiều lỗi như Automatic Reference lỗi Đếm, Cast của Objective-C kiểu con trỏ 'NSString *' C kiểu con trỏ 'CFStringRef' vvRegexKitLite trong IOS5

Xin giúp; nơi có tôi đã đi sai.

Trả lời

0

Bạn không làm gì sai. Regexkit chưa được cập nhật lên iOS 5. Thay đổi lớn trong iOS 5 là không còn giữ lại, phát hành hoặc tự động phát hành nữa. Mọi thứ bộ nhớ đều tự động như Java. (Ngoại trừ việc nó xảy ra vào thời gian biên dịch thay vì thời gian chạy. Vì vậy, nó giống như khái niệm Java. Chủ yếu là.)

Dù sao, thay vì đợi Regexkit cập nhật, bạn có thể sử dụng NSRegularExpression. Sử dụng các công cụ của Apple cũng là tương lai-bằng chứng kể từ khi họ giữ phiên bản cập nhật công cụ của riêng mình cho phiên bản.

Chúc may mắn!

+0

nó không giống như java;) như ... không phải ở tất cả –

0

CBGraham là đúng. Ngoài ra, bạn có thể tắt tính năng đếm tham chiếu tự động (Project> Build settings> tìm kiếm 'đếm tham chiếu tự động').

Bạn rõ ràng là sẽ phải làm thủ công tính tham khảo, nhưng RegexKitLite nên xây dựng bây giờ ...

33

Bạn cũng có thể vô hiệu hóa các ARC cho RegexKitLite chỉ bằng cách thêm một lá cờ:

chọn dự án -> Mục tiêu của bạn -> trên tab "Xây dựng giai đoạn" và mở "Biên dịch nguồn" và thêm cho "RegexKitLite.m" cờ "-fno-objc-arc".

Cập nhật: Nếu bạn nhận được:

ký Undefined: "_uregex_reset", tham chiếu từ: _rkl_splitArray trong RegexKitLite.o _rkl_replaceAll trong RegexKitLite.o "_uregex_appendTail", tham chiếu từ: .... ...

Sau đó, bạn cần phải thêm vào Tab "Xây dựng Settings" -> "Kết nối" -> "Flags Linker khác" the "-licucore"

+0

trình như một nét duyên dáng ... – emreoktem

+0

Trong hiện đại lần, bạn nên vào Link Binary with Libraries và thêm "libicucore.dylib" – seo

0

tôi thay RegexKitLite với có hai phương pháp.

Kết quả String:

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

Mảng Kết quả:

+(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; 
} 
Các vấn đề liên quan