2010-10-22 22 views
63

Dự án của tôi có chức năng danh mục UIImage mà tôi muốn gọi từ một lớp khác. Tôi nhập đúng tệp tiêu đề cho danh mục hình ảnh và tôi nhận dự án để biên dịch mà không có cảnh báo.Mục tiêu-C Danh mục Gây ra bộ chọn không được nhận dạng

Vấn đề là khi tôi gọi chức năng danh mục UIImage tôi đã thấy lỗi bộ chọn không được công nhận với NSInvalidArgumentException. Tại sao tôi thấy điều này nếu tôi đã liên kết đúng cách mọi thứ?

#import <UIKit/UIKit.h> 

@interface UIImage (DRShare) 

+ (UIImage*) imageNamed:(NSString*)name; 

@end 


@implementation UIImage (DRShare) 

+ (UIImage*) imageNamedDR:(NSString*)name{ 

    CGFloat s = 1.0f; 
    if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){ 
     s = [[UIScreen mainScreen] scale]; 
    } 

    NSString *path = [NSString stringWithFormat:@"%@%@%@.png",kImagesPath,name,s > 1 ? @"@2x":@""]; 
    return [UIImage imageWithContentsOfFile:DRBUNDLE(path)]; 
} 

@end 

tập tin mà gọi đó là:

 backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamedDR:@"Share Popup Background"]]; 

ngoại lệ huy động:

2010-10-22 11:51:02.880 Stuff[11432:207] +[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938 
2010-10-22 11:51:02.883 Stuff[11432:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x02e65b99 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x02fb540e objc_exception_throw + 47 
    2 CoreFoundation      0x02e6776b +[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x02dd72b6 ___forwarding___ + 966 
    4 CoreFoundation      0x02dd6e72 _CF_forwarding_prep_0 + 50 
    5 TapTapShare       0x0001291c -[DRShareViewController backgroundView] + 127 
    6 TapTapShare       0x00-[DRShareViewController loadView] + 639 
    7 UIKit        0x0044f54f -[UIViewController view] + 56 
    8 UIKit        0x0044d9f4 -[UIViewController contentScrollView] + 42 
    9 UIKit        0x0045d7e2 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48 
    10 UIKit        0x0045bea3 -[UINavigationController _layoutViewController:] + 43 
    11 UIKit        0x0045d12d -[UINavigationController _startTransition:fromViewController:toViewController:] + 524 
    12 UIKit        0x00457ccd -[UINavigationController _startDeferredTransitionIfNeeded] + 266 
    13 UIKit        0x00574b55 -[UILayoutContainerView layoutSubviews] + 226 
    14 QuartzCore       0x02616481 -[CALayer layoutSublayers] + 177 
    15 QuartzCore       0x026161b1 CALayerLayoutIfNeeded + 220 
    16 QuartzCore       0x026160bd -[CALayer layoutIfNeeded] + 111 
+1

vui lòng cung cấp mã số và Ngoại lệ chi tiết. Khá không thể trả lời mà không có điều đó. –

+0

Tuyên bố 'imageNamedTT:' cũng sẽ hữu ích. –

+1

Có thể nào, trường hợp của bạn thực sự là một lớp khác? –

Trả lời

198

Một vài khả năng:

  1. Bạn đã không liên kết UIImage+TTShare.m vào mục tiêu của bạn. Vì vậy, trong khi bạn có tiêu đề, bạn không biên dịch triển khai.
  2. Nếu đây là một phần của thư viện tĩnh, bạn cần phải thêm -all_load vào Cờ liên kết khác cài đặt bản dựng cho ứng dụng liên kết với thư viện.
+0

Đối với hồ sơ, tôi nghĩ rằng tôi sai lầm lên thư mục tĩnh của tôi mục tiêu lên. – devinross

+2

+1 Cảm ơn, chỉ cần gợi ý rằng # 1 được cung cấp! – bentford

+23

Cảm ơn bạn đã chỉ ra vấn đề với các thư viện tĩnh. http://developer.apple.com/library/mac/#qa/qa1490/_index.html có thêm thông tin. Để rõ ràng, bạn phải thêm cờ đó vào cờ liên kết cho ứng dụng bao gồm thư viện tĩnh, không phải khi xây dựng thư viện tĩnh. –

4

Tôi đã gặp vấn đề tương tự và phải áp dụng sửa lỗi này. Tệp nguồn NSDate-Extensions.m của tôi không được biên dịch nên tôi phải vào Cài đặt dự án, sau đó chọn mục tiêu thích hợp, sau đó nhấp vào tab "Xây dựng giai đoạn", sau đó mở rộng mục "Biên dịch nguồn", sau đó nhấp vào nút + biểu tượng và tự thêm tập tin NSDate-Extensions.m của tôi.

0

Tôi đã có thông báo lỗi này và tôi đang sử dụng Cocoapods. Để khắc phục lỗi, tôi chỉ cần gọi lại pod install để tạo tất cả các liên kết cần thiết một cách chính xác.

6

Nếu bạn muốn sử dụng phương pháp Danh mục, bạn phải thêm -ObjC vào cài đặt xây dựng Cờ kết nối khác của APP của bạn.

0

Một khả năng khác.

Bạn có triển khai danh mục nhưng không có giao diện. Tôi có nghĩa là bạn đã quên khai báo trong * .h giao diện của danh mục của bạn.

0

Tuy nhiên, một khả năng:

này gần như là quá xấu hổ để thừa nhận, nhưng chỉ trong trường hợp ai đó có thể đã làm cùng một sai lầm ngớ ngẩn:

tôi đã sao chép mã từ một dự án khác, và do nhầm lẫn Tôi đã dán mã nguồn giống nhau trong tệp .h và tệp .m (trong cả hai tôi đã đặt mã có nghĩa là cho tệp .h). Tôi đã sửa tệp .m và đã hoạt động.

0

Có thể là do bạn viết imageNamed thay vì imageNamedDR trong giao diện ..

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