在我的应用程序中,我将使用集合视图,但我遇到了问题。我在故事板中设计了集合视图。我在视图控制器中插入了一个集合视图,并将委托和数据源连接到必须管理此视图控制器的类(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
答案 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;
}