2012-09-21 27 views
13

Tôi đang sử dụng TTTAttributedLabel lớn (https://github.com/mattt/TTTAttributedLabel) mà hoạt động tốt dưới iOS 5. Theo iOS 6 tuy nhiên, tôi nhận được lỗi:(NSCFType bộ) - selector không được nhận ra trong iOS 6

-[__NSCFType set]: unrecognized selector sent to instance 0x200020e0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '- [__NSCFType set]: unrecognized selector sent to instance 0x200020e0' 

Sau khi nghiên cứu các phát hành một chút, có vẻ như thông báo đã được gửi đến một đối tượng đã được phát hành. Sử dụng trình gỡ lỗi, tôi có po'd 0x200020e0 mà dường như là một CTFontRef.

po 0x200020e0 
(int) $0 = 536879328 CTFont <name: .HelveticaNeueUI-Bold, size: 20.000000, matrix: 0x0> 
CTFontDescriptor <attributes: <CFBasicHash 0x20001900 [0x3c2a4100]>{type = mutable dict, count = 1, 
entries => 
1 : <CFString 0x3be2a768 [0x3c2a4100]>{contents = "NSFontNameAttribute"} = <CFString 0x3c292c14 [0x3c2a4100]>{contents = ".HelveticaNeueUI-Bold"} 

}

Điều này dẫn tôi thẳng vào mã đó thiết lập các TTTAttributedLabel:

[label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) { 
    NSRange boldRange = [[mutableAttributedString string] rangeOfString:title options:NSCaseInsensitiveSearch]; 
    NSRange strikeRange = [[mutableAttributedString string] rangeOfString:@"sit amet" options:NSCaseInsensitiveSearch]; 


    UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:20]; 

    CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL); 

    if (font) { 
     [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange]; 
     [mutableAttributedString addAttribute:(NSString*)kCTForegroundColorAttributeName value:(__bridge id)font range:boldRange]; 
     CFRelease(font); 
    } 

    return mutableAttributedString; 
}]; 

như trong ví dụ sử dụng ở đây:

https://github.com/mattt/TTTAttributedLabel

Đó là mã không được phân loại vì vậy tôi đã thêm vào trong các phôi cầu nối (xem ở trên). Tôi đã cố gắng giữ lại tất cả các nơi nhưng điều đó dường như không giải quyết vấn đề (mà dường như) rằng CTFontRef là nhận được phát hành quá sớm (tôi nghĩ rằng - đề nghị khác chào đón).

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này và lý do tại sao điều này chỉ xuất hiện trong trình mô phỏng iOS 6? Cảm ơn trước.

Trả lời

4

Trong khi kết thúc nó chỉ là một sai lầm ngu ngốc -

[mutableAttributedString addAttribute:(NSString*)kCTForegroundColorAttributeName value:(__bridge id)font range:boldRange]; 

nên đọc:

[mutableAttributedString addAttribute:(NSString*)kCTForegroundColorAttributeName value:(id)[UIColor blueColor].CGColor range:boldRange]; 
2

Tôi gặp phải lỗi tương tự khi tôi có nhãn myLabel nhãn, và thực hiện myLabel.attributedText = NSMutableAttributedString.

Hãy thử https://github.com/AliSoftware/OHAttributedLabel

Tuyên bố:

@property (nonatomic, strong) IBOutlet OHAttributedLabel *myLabel;

thay vì UILabel giải quyết lỗi.

7

thay thế:

CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL); 

với:

UIFont *font = [UIFont fontWithName:boldSystemFont.fontName size:boldSystemFont.pointSize]; 

Cố định vấn đề trong iOS6 cho tôi. Không thử nghiệm trên iOS 5.

1

tôi quản lý để nhận được lỗi này khi tôi đã sử dụng một xấu thêm thuộc tính vào NSMutableAttributedString. Sửa chữa phạm vi cố định vụ tai nạn!

EDIT: Cũng quản lý để có được nó bằng cách sử dụng UITextAttributeFont trong từ điển thuộc tính mà rõ ràng là bây giờ không được chấp nhận trong iOS 7 mà chỉ làm cho mọi thứ sụp đổ bí ẩn. Việc thay thế là NSForegroundColorAttributeName.

+0

Xin lỗi, chỉ cần nhận thấy rằng chỉnh sửa ở đó không có ý nghĩa gì nhiều .. Không thể nhớ khóa nào tôi muốn nói nhưng bạn có thể tìm ra trong trường hợp của mình. Về cơ bản không sử dụng các khóa không dùng nữa! – CMash

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