2010-04-02 36 views
7

Tôi đã có một vấn đề khác trong cùng mã ... Tôi nhận được lỗi này:Lỗi "Tạo một trường hợp cụ thể!"

initialization method -initWithCharactersNoCopy:length:freeWhenDone: cannot be sent to an abstract object of class NSString_RegEx: Create a concrete instance!

Nhưng tôi không hiểu được những lỗi hay tôi nên làm gì ...

chỉnh sửa:

NSString *pageContent = [[NSString alloc] initWithData:pageContents encoding:NSASCIIStringEncoding]; 
NSString_RegEx *pContent = [[NSString_RegEx alloc] initWithString: pageContent]; 
+0

HOw bạn đã phân bổ trường hợp này? –

+0

Hiển thị mã của bạn. –

Trả lời

11

Bạn đang thấy điều này vì NSString là một cụm lớp. Xem tài liệu của Apple here để có giải thích chung và here cho ghi chú cụ thể về phân lớp NSString. Về cơ bản, NSString là một lớp trừu tượng không có phương thức lưu trữ các ký tự, và các phương thức -initWith… khác nhau đều trả về các lớp con cụ thể khác nhau của NSString dựa trên phương thức khởi tạo. Thông thường, khi bạn đang sử dụng NSString, điều này hoàn toàn minh bạch. Tuy nhiên, nếu bạn muốn phân lớp NSString, bạn phải thực hiện ít nhất các phương thức cơ bản (-length, và -characterAtIndex :) cộng với bất kỳ phương thức init nào bạn muốn có (cộng với, rõ ràng là có cách lưu trữ các ký tự của chuỗi).

Nếu bạn chỉ muốn thêm chức năng vào NSString, phân lớp phụ thường không cần thiết. Trước tiên, bạn nên kiểm tra xem một thể loại, hoặc một hàm hoạt động trên một NSString, hoặc một phương thức trên một lớp có chứa NSString sẽ hoạt động tốt hơn. Ví dụ: xem RegexKit hoặc Google Toolbox For Mac, cả hai đều thực hiện hỗ trợ biểu thức chính quy bằng cách sử dụng danh mục trên NSString.

+0

Cảm ơn rất nhiều! Vấn đề khác của tôi được giải quyết! (A) Tôi không thể tìm thấy thứ gì đó như RegexKit ... – dododedodonl

Các vấn đề liên quan