it-swarm-id.com

Kategori Objective-C Menyebabkan pemilih tidak dikenal

Proyek saya memiliki fungsi kategori UIImage yang ingin saya panggil dari kelas lain. Saya mengimpor file header dengan benar untuk kategori gambar dan saya mendapatkan proyek untuk dikompilasi tanpa peringatan.

Masalahnya adalah ketika saya memanggil fungsi kategori UIImage saya melihat kesalahan pemilih yang tidak dikenal dengan NSInvalidArgumentException. Mengapa saya melihat ini jika saya menautkan semuanya dengan benar?

#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

file yang menyebutnya:

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

pengecualian yang diajukan:

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                         0x00012343 -[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
66
devinross

Beberapa kemungkinan:

  1. Anda tidak menautkan UIImage+TTShare.m ke target Anda. Jadi saat Anda memiliki tajuk, Anda tidak mengkompilasi implementasinya.
  2. Jika ini adalah bagian dari perpustakaan statis, Anda perlu menambahkan -all_load ke Other Linker Flags build untuk aplikasi yang terhubung dengan perpustakaan.
205
Dave DeLong

Jika Anda ingin menggunakan metode Category, Anda harus menambahkan -ObjC ke pengaturan build Other Linker Flags dari aplikasi Anda.

8
ling

Saya memiliki masalah yang sama dan harus menerapkan perbaikan ini juga ..__ File NSDate-Extensions.m saya tidak dikompilasi jadi saya harus masuk ke Pengaturan Proyek, kemudian pilih target yang sesuai, lalu klik "Build Phases "tab, lalu rentangkan item" Kompilasi Sumber ", lalu klik simbol + dan secara manual tambahkan file NSDate-Extensions.m saya.

6
Clive Paterson

Mungkin karena Anda menulis imageNamed bukannya imageNamedDR di antarmuka ..

0
Hlung

Saya mendapat pesan kesalahan ini dan saya menggunakan Cocoapods. Untuk memperbaiki kesalahan, saya hanya perlu memanggil pod install lagi untuk membuat semua tautan yang diperlukan dengan benar.

0
H6.

Namun kemungkinan lain:

Ini hampir terlalu memalukan untuk diakui, tetapi kalau-kalau ada yang melakukan kesalahan konyol yang sama:

Saya menyalin kode dari satu proyek ke proyek lain, dan secara tidak sengaja saya menempelkan kode sumber yang sama dalam file .h dan file .m (keduanya saya telah memasukkan kode yang dimaksudkan untuk file .h). Saya memperbaiki file .m saya dan berhasil.

0

Kemungkinan lain.

Anda memiliki implementasi kategori tetapi tidak memiliki antarmuka. Maksud saya Anda lupa menyatakan dalam *. H antarmuka kategori Anda.

0
Voda Ion