一个简单的测试应用程序中的SDWebImage与NSInvalidArgumentException崩溃

时间:2014-01-11 18:31:37

标签: ios iphone objective-c ipad uiimageview

在Xcode 5.0.2中

  1. 我为iPhone创建a blank single view app
  2. 然后将“male.png”图像添加到项目中,
  3. 将UIImageView拖到故事板
  4. 最后将以下代码添加到viewDidLoad

    _imageView.image = [UIImage imageNamed:@"male.png"];

  5. 这很有效:

    simulator screenshot

    然后我添加SDWebImage project中的文件并将ViewController.m更改为:

    #import "ViewController.h"
    #import <SDWebImage/UIImageView+WebCache.h>
    
    static NSString* const kAvatar = @"http://gravatar.com/avatar/55b3816622d935e50098bb44c17663bc.png";
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        [_imageView setImageWithURL:[NSURL URLWithString:kAvatar]
                   placeholderImage:[UIImage imageNamed:@"male.png"]];
    }
    
    @end
    

    不幸的是,这导致应用程序崩溃并显示错误消息:

    2014-01-11 19:21:57.731 sdImage[2563:70b] -[UIImageView setImageWithURL:placeholderImage:]: unrecognized selector sent to instance 0x8a5aa80
    2014-01-11 19:21:57.745 sdImage[2563:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView setImageWithURL:placeholderImage:]: unrecognized selector sent to instance 0x8a5aa80'
    *** First throw call stack:
    (
        0   CoreFoundation                      0x017395e4 __exceptionPreprocess + 180
        1   libobjc.A.dylib                     0x014bc8b6 objc_exception_throw + 44
        2   CoreFoundation                      0x017d6903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
        3   CoreFoundation                      0x0172990b ___forwarding___ + 1019
        4   CoreFoundation                      0x017294ee _CF_forwarding_prep_0 + 14
        5   sdImage                             0x00002b43 -[ViewController viewDidLoad] + 227
        6   UIKit                               0x0033e318 -[UIViewController loadViewIfRequired] + 696
        7   UIKit                               0x0033e5b4 -[UIViewController view] + 35
        8   UIKit                               0x002669fd -[UIWindow addRootViewControllerViewIfPossible] + 66
        9   UIKit                               0x00266d97 -[UIWindow _setHidden:forced:] + 312
        10  UIKit                               0x0026702d -[UIWindow _orderFrontWithoutMakingKey] + 49
        11  UIKit                               0x0027189a -[UIWindow makeKeyAndVisible] + 65
        12  UIKit                               0x00224cd0 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1851
        13  UIKit                               0x002293a8 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824
        14  UIKit                               0x0023d87c -[UIApplication handleEvent:withNewEvent:] + 3447
        15  UIKit                               0x0023dde9 -[UIApplication sendEvent:] + 85
        16  UIKit                               0x0022b025 _UIApplicationHandleEvent + 736
        17  GraphicsServices                    0x036e02f6 _PurpleEventCallback + 776
        18  GraphicsServices                    0x036dfe01 PurpleEventCallback + 46
        19  CoreFoundation                      0x016b4d65 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
        20  CoreFoundation                      0x016b4a9b __CFRunLoopDoSource1 + 523
        21  CoreFoundation                      0x016df77c __CFRunLoopRun + 2156
        22  CoreFoundation                      0x016deac3 CFRunLoopRunSpecific + 467
        23  CoreFoundation                      0x016de8db CFRunLoopRunInMode + 123
        24  UIKit                               0x00228add -[UIApplication _run] + 840
        25  UIKit                               0x0022ad3b UIApplicationMain + 1225
        26  sdImage                             0x00002ffd main + 141
        27  libdyld.dylib                       0x01d7770d start + 1
    )
    libc++abi.dylib: terminating with uncaught exception of type NSException
    (lldb) 
    

    为什么会这样?在添加框架文件时,我已设置复选框以复制文件。

    更新

    我也尝试了以下内容:

    git submodule add https://github.com/rs/SDWebImage.git
    

    然后构建该项目(SDWebImage.xcodeproj)并关闭它。

    然后我在Xcode我的项目(sdImage.xcodeproj)中重新打开并将SDWebImage.xcodeproj文件拖入其中。

    之后我尝试添加目标依赖,但它没有显示任何名为“SDWebImage”的内容:

    screenshot

    这里是full sized screenshot

    我无法在 Link Binary With Libraries 下添加“SDWebImage.framework”,因为没有任何名为“SDWebImage”的内容。

2 个答案:

答案 0 :(得分:2)

为什么不在主项目中包含SDWebImage源文件?这就是我整合SDWebImage的方式,SDWebImage文档本身也说明了这一点:“在项目中有两种方法可以使用它:将所有文件复制到项目中,或者将项目作为静态库导入。 “如果这样做,就不需要打开SDWebImage项目,编译框架,将框架与项目链接等等。

答案 1 :(得分:0)

我通过使用CocoaPods以及Podfile来获得该项目:

platform :ios, '5.0'
pod 'SDWebImage'

然后在Xcode中运行pod install并打开sdImage.xcworkspace

我仍然对如何在项目中使用SDWebImage感兴趣 - 不使用CocoaPods ......