Search code examples
iosswiftsdwebimagebridging-header

Swift - unrecognized selector sent to instance on SDWebImage methods on


I have added ful SDWebImage folder on my project. Also added a bridging header . My app don't create any problem during install but while i try to access SDWebImage methods it give the the following exception "unrecognized selector sent to instance" with error code:

    d_setImageWithURL:placeholderImage:options:completed:]: unrecognized selector sent to instance 0x7f80e7d2e490
2018-03-04 18:53:41.673344+0600 Messenger[24721:203878] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView sd_setImageWithURL:placeholderImage:options:completed:]: unrecognized selector sent to instance 0x7f80e7d2e490'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010f7d11cb __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000011028af41 objc_exception_throw + 48
    2   CoreFoundation                      0x000000010f851914 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3   UIKit                               0x0000000111aa30bd -[UIResponder doesNotRecognizeSelector:] + 295
    4   CoreFoundation                      0x000000010f754178 ___forwarding___ + 1432
    5   CoreFoundation                      0x000000010f753b58 _CF_forwarding_prep_0 + 120
    6   Messenger                           0x000000010e269a26 _T09Messenger32RMStickerMarketHomeTableViewCellC22showImageFromURLStringySS9urlString_So07UIImageF0C2inSo019UIActivityIndicatorF0C4withtF + 582
    7   Messenger                           0x000000010e26d4ee _T09Messenger32RMStickerMarketHomeTableViewCellC010collectionF0So012UICollectionfG0CSo0iF0C_10Foundation9IndexPathV13cellForItemAttF + 7918
    8   Messenger                           0x000000010e26d84c _T09Messenger32RMStickerMarketHomeTableViewCellC010collectionF0So012UICollectionfG0CSo0iF0C_10Foundation9IndexPathV13cellForItemAttFTo + 92
    9   UIKit                               0x000000011232f426 -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 290
    10  UIKit                               0x000000011232f2fe -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 35
    11  UIKit                               0x000000011233481b -[UICollectionView _updateVisibleCellsNow:] + 4775
    12  UIKit                               0x000000011233a710 -[UICollectionView layoutSubviews] + 364
    13  UIKit                               0x0000000111949551 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1331
    14  QuartzCore                          0x00000001114774ba -[CALayer layoutSublayers] + 153
    15  QuartzCore                          0x000000011147b5a9 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401
    16  UIKit                               0x0000000111933e5f -[UIView(Hierarchy) layoutBelowIfNeeded] + 662
    17  UIKit                               0x000000011193b01c +[UIView(Animation) performWithoutAnimation:] + 90
    18  UIKit                               0x00000001119d4163 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 1354
    19  UIKit                               0x00000001119d44ab -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74
    20  UIKit                               0x000000011199a870 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2892
    21  UIKit                               0x00000001119bbde9 -[UITableView layoutSubviews] + 176
    22  UIKit                               0x0000000111949551 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1331
    23  QuartzCore                          0x00000001114774ba -[CALayer layoutSublayers] + 153
    24  QuartzCore                          0x000000011147b5a9 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401
    25  QuartzCore                          0x00000001114041cd _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 365
    26  QuartzCore                          0x000000011142fae4 _ZN2CA11Transaction6commitEv + 500
    27  QuartzCore                          0x0000000111430830 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 76
    28  CoreFoundation                      0x000000010f773db7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    29  CoreFoundation                      0x000000010f773d0e __CFRunLoopDoObservers + 430
    30  CoreFoundation                      0x000000010f758324 __CFRunLoopRun + 1572
    31  CoreFoundation                      0x000000010f757a89 CFRunLoopRunSpecific + 409
    32  GraphicsServices                    0x0000000118a4d9c6 GSEventRunModal + 62
    33  UIKit                               0x000000011187ad30 UIApplicationMain + 159
    34  Messenger                           0x000000010e2339a7 main + 55
    35  libdyld.dylib                       0x00000001150edd81 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Here is my bridging header files code:

#ifndef Messenger_Bridging_Header_h
#define Messenger_Bridging_Header_h

#import <authsdk/AuthSDKManager.h>
#import <IMSDK/IMManager.h>
#import "OpenUDID.h"
#import "UIImageView+WebCache.h"
#import "OrderedDictionary.h"
#import "UINavigationController+SGProgress.h"
#import "KASlideShow.h"

#endif /* Messenger_Bridging_Header_h */

Here is my code where i use SDWebImage methods on my projects:

    func showImageFromURLString(urlString: String, in imageView: UIImageView, with activityIndicatorView: UIActivityIndicatorView) -> Void {
        let imageURL = URL(string: urlString)
        if let url = imageURL{
            activityIndicatorView.isHidden = false
            activityIndicatorView.startAnimating()

//          imageView.setImageWith(url, placeholderImage: nil, options: .cacheMemoryOnly){
//              (image, error, cacheType) in
//              activityIndicatorView.stopAnimating()
//              activityIndicatorView.isHidden = true
//          }
            imageView.sd_setImage(with: url, placeholderImage: nil, options: .cacheMemoryOnly) {
                (image, error, cacheType, url) in
                activityIndicatorView.stopAnimating()
                activityIndicatorView.isHidden = true
            }
        }
    }

Solution

  • Reason:

    Added from "Build Phases -> Link Binary with Libraries" which added the framework and made a copy of that framework at the root folder of the projects.

    Solution:

    Remove library from Link Binary with Libraries, also remove from Project Navigator, Then copy the framework files under "AppName -> AppName -> Frameworks", then add on project navigator, then add on Link Binary with Libraries

    Finally add this line on project bridging header like below, problem should be solved

    #ifndef Messenger_Bridging_Header_h
    #define Messenger_Bridging_Header_h
    
    #import <SDWebImage/UIImageView+WebCache.h>
    
    #endif /* Messenger_Bridging_Header_h */