Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例

Posted

技术标签:

【中文标题】Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例【英文标题】:Swift - unrecognized selector sent to instance on SDWebImage methods on 【发布时间】:2018-03-04 13:05:08 【问题描述】:

我在我的项目中添加了完整的 SDWebImage 文件夹。还添加了一个桥接头。我的应用在安装过程中没有产生任何问题,但是当我尝试访问 SDWebImage 方法时,它会给出以下异常“无法识别的选择器发送到实例”,并带有错误代码:

    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

这是我的桥接头文件代码:

#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 */

这是我在项目中使用 SDWebImage 方法的代码:

    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
            
        
    

【问题讨论】:

UIImageView 有 sd_setImageWithURL 方法吗? 否,默认不是,但它是 SDWebImage 库的扩展提供的方法 是否可以将您的代码上传到 GitHub 或其他地方并在此处发送链接? ***.com/questions/23231340/… 库似乎没有正确链接到您的项目。 【参考方案1】:

原因

从添加的“构建阶段 -> 将二进制文件与库链接”添加 框架并在根文件夹中制作了该框架的副本 项目。

解决方案

从 Link Binary with Libraries 中删除库,同时从 Project Navigator,然后将框架文件复制到“AppName -> AppName -> Frameworks”,然后添加项目导航器,然后添加 将二进制文件与库链接

最后在项目桥接头上添加这一行,如下所示,问题应该解决了

#ifndef Messenger_Bridging_Header_h
#define Messenger_Bridging_Header_h

#import <SDWebImage/UIImageView+WebCache.h>

#endif /* Messenger_Bridging_Header_h */

【讨论】:

以上是关于Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例的主要内容,如果未能解决你的问题,请参考以下文章

Swift:手势识别器无法识别的选择器发送到实例

Swift无法识别的选择器发送到实例

无法识别的选择器发送到实例 - Swift

Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例

NSNotification 无法识别的选择器发送到 Swift 中的实例

Swift Customized UIButton 无法识别的选择器发送到实例