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

时间:2013-11-27 09:56:09

标签: ios objective-c uiimage selector uicollectionviewcell

在我的应用程序中,我将使用集合视图,但我遇到了问题。我在故事板中设计了集合视图。我在视图控制器中插入了一个集合视图,并将委托和数据源连接到必须管理此视图控制器的类(CategoryViewController.m)。 我创建了一个非常简单的单元格,在其中放置了一个图像视图,然后我创建了一个带有子类UICollectionViewCell的类,然后我选择了管理单元格的类,并将图像视图连接到此类。 在CategoryViewController.m我设置了一个数组,其中有我想要显示的图像,我使用了UICollectionView的委托方法,当我运行应用程序时它告诉我:unrecognized selector sent to instance。我会在这里放置代码,以便您可以帮我修复它:

创建图像数组的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIImage *image1 = [UIImage imageNamed:@"image_glasses.png"];
    UIImage *image2 = [UIImage imageNamed:@"image_jacket.png"];
    UIImage *image3 = [UIImage imageNamed:@"image_pants.png"];
    UIImage *image4 = [UIImage imageNamed:@"image_scent.png"];
    imageArray = [NSArray arrayWithObjects:image1, image2, image3, image4, nil];
}

委托UICollectionView的方法:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return imageArray.count;
}

- (UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    UIImage *image = [UIImage imageNamed:imageArray[indexPath.row]];
    cell.imageViewCell.image = image;

    return cell;
}

当我运行应用时,它崩溃了:UIImage *image = [UIImage imageNamed:imageArray[indexPath.row]];,我的方法出了什么问题?

更新

这是完整的崩溃日志:

2013-11-27 10:54:34.853 BitmamaShop[1579:70b] -[UIImage stringByDeletingPathExtension]: unrecognized selector sent to instance 0xbe79910
2013-11-27 10:54:34.858 BitmamaShop[1579:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage stringByDeletingPathExtension]: unrecognized selector sent to instance 0xbe79910'
*** First throw call stack:
(
    0   CoreFoundation                      0x025445e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x022c78b6 objc_exception_throw + 44
    2   CoreFoundation                      0x025e1903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
    3   CoreFoundation                      0x0253490b ___forwarding___ + 1019
    4   CoreFoundation                      0x025344ee _CF_forwarding_prep_0 + 14
    5   UIKit                               0x01687d65 -[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:] + 42
    6   UIKit                               0x016880c2 -[_UIAssetManager imageNamed:scale:idiom:subtype:] + 73
    7   UIKit                               0x0168810e -[_UIAssetManager imageNamed:idiom:subtype:] + 71
    8   UIKit                               0x0168814f -[_UIAssetManager imageNamed:idiom:] + 60
    9   UIKit                               0x01688189 -[_UIAssetManager imageNamed:] + 53
    10  UIKit                               0x01062173 +[UIImage imageNamed:] + 57
    11  BitmamaShop                         0x0000794f -[CategoryViewController collectionView:cellForItemAtIndexPath:] + 255
    12  UIKit                               0x01647bc8 -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 257
    13  UIKit                               0x01649217 -[UICollectionView _updateVisibleCellsNow:] + 3677
    14  UIKit                               0x0164c57f -[UICollectionView layoutSubviews] + 267
    15  UIKit                               0x010a0267 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355
    16  libobjc.A.dylib                     0x022d981f -[NSObject performSelector:withObject:] + 70
    17  QuartzCore                          0x00d022ea -[CALayer layoutSublayers] + 148
    18  QuartzCore                          0x00cf60d4 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
    19  QuartzCore                          0x00d04715 -[CALayer(CALayerPrivate) layoutBelowIfNeeded] + 43
    20  UIKit                               0x01092c76 -[UIView(Hierarchy) layoutBelowIfNeeded] + 595
    21  UIKit                               0x01092a1d -[UIView(Hierarchy) layoutIfNeeded] + 74
    22  UIKit                               0x0116ef14 -[UINavigationController _layoutViewController:] + 1062
    23  UIKit                               0x0116e136 -[UINavigationController _layoutTopViewController] + 176
    24  UIKit                               0x0116c365 -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 429
    25  UIKit                               0x0135b5f6 -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] + 328
    26  UIKit                               0x0135b8fb -[UINavigationTransitionView _cleanupTransition] + 703
    27  UIKit                               0x0135b93a -[UINavigationTransitionView _navigationTransitionDidStop] + 55
    28  UIKit                               0x01081c6c -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 267
    29  UIKit                               0x01080455 +[UIViewAnimationState popAnimationState] + 334
    30  UIKit                               0x01094cf6 +[UIView(Animation) commitAnimations] + 36
    31  UIKit                               0x0135b3f9 -[UINavigationTransitionView transition:fromView:toView:] + 2795
    32  UIKit                               0x0135a906 -[UINavigationTransitionView transition:toView:] + 55
    33  UIKit                               0x0116fd47 -[UINavigationController _startTransition:fromViewController:toViewController:] + 3186
    34  UIKit                               0x0117009c -[UINavigationController _startDeferredTransitionIfNeeded:] + 645
    35  UIKit                               0x01170cb9 -[UINavigationController __viewWillLayoutSubviews] + 57
    36  UIKit                               0x012aa181 -[UILayoutContainerView layoutSubviews] + 213
    37  UIKit                               0x010a0267 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355
    38  libobjc.A.dylib                     0x022d981f -[NSObject performSelector:withObject:] + 70
    39  QuartzCore                          0x00d022ea -[CALayer layoutSublayers] + 148
    40  QuartzCore                          0x00cf60d4 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
    41  QuartzCore                          0x00cf5f40 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26
    42  QuartzCore                          0x00c5dae6 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294
    43  QuartzCore                          0x00c5ee71 _ZN2CA11Transaction6commitEv + 393
    44  QuartzCore                          0x00d1b430 +[CATransaction flush] + 52
    45  UIKit                               0x01051dc9 _afterCACommitHandler + 131
    46  CoreFoundation                      0x0250c4ce __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
    47  CoreFoundation                      0x0250c41f __CFRunLoopDoObservers + 399
    48  CoreFoundation                      0x024ea344 __CFRunLoopRun + 1076
    49  CoreFoundation                      0x024e9ac3 CFRunLoopRunSpecific + 467
    50  CoreFoundation                      0x024e98db CFRunLoopRunInMode + 123
    51  GraphicsServices                    0x02eef9e2 GSEventRunModal + 192
    52  GraphicsServices                    0x02eef809 GSEventRun + 104
    53  UIKit                               0x01035d3b UIApplicationMain + 1225
    54  BitmamaShop                         0x0005980d main + 141
    55  libdyld.dylib                       0x0484970d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

3 个答案:

答案 0 :(得分:12)

您的imageArray数组包含UIImage个对象。所以你可以直接使用它。而不是使用

UIImage *image = [UIImage imageNamed:imageArray[indexPath.row]]; 

使用

UIImage *image = imageArray[indexPath.row];

答案 1 :(得分:0)

- (UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    UIImage *image = [UIImage imageNamed:imageArray[indexPath.row]];
    cell.imageViewCell.image = [imageArray objectAtIndex:indexPath.row];

    return cell;
}

答案 2 :(得分:-1)

您必须在自定义单元类和&中创建UIImageView插座。执行此操作后连接它,您可以编写以下代码:

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    {
        CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

        cell.imageViewCell.image = [NSString stringWithFormat:@"%@",[imageArray objectAtIndex:indexPath.row]];

        return cell;
    }