当我运行我的应用程序时,我找到了一个信号SIGABRT线程。这是错误消息: [__NSCFConstantString _isResizable]:无法识别的选择器发送到实例0x5c20
问题来自于 [[self myCollectionView] setDataSource:self]; 因为它在评论时消失了。
根据我的理解,myCollectionView数据源和self的类型不一样。这就是我有错误的原因。
感谢您的帮助
皮尔
CalViewController.h
#import <UIKit/UIKit.h>
@interface CalViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate>
@property (weak, nonatomic) IBOutlet UICollectionView *myCollectionView;
@end
CalViewController.m
#import "CalViewController.h"
#import "CustomCell.h"
@interface CalViewController ()
{
NSArray *arrayOfImages;
NSArray *arrayOfDescriptions;
}
@end
@implementation CalViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[[self myCollectionView]setDataSource:self];
[[self myCollectionView]setDelegate:self];
arrayOfImages = [[NSArray alloc]initWithObjects:@"chibre.jpg",nil];
arrayOfDescriptions =[[NSArray alloc]initWithObjects:@"Test",nil];
}
- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return [arrayOfDescriptions count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier=@"Cell";
CustomCell *cell = ([collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath]);
[[cell myImage]setImage:[arrayOfImages objectAtIndex:indexPath.item]];
[[cell myDescriptionLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]];
return cell;
}
- (NSInteger)numberOfSections:(UICollectionView *) collectionView
{return 1;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
答案 0 :(得分:6)
您的arrayOfImages
是一个图像名称(字符串)数组,因此setImage
将不起作用。而不是:
[[cell myImage]setImage:[arrayOfImages objectAtIndex:indexPath.item]];
你可能打算:
[[cell myImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]];
或等同于:
cell.myImage.image = [UIImage imageNamed:arrayOfImages[indexPath.item]];
您甚至可能希望将arrayOfImages
重命名为arrayOfImageNames
(或仅imageNames
或其他),以消除这种可能的混淆来源。
(顺便说一句,这是一个很好的电话,不把实际的图像放在数组中。我们应该总是根据数组中的图像名称在cellForItemAtIndexPath
中创建图像对象。)
答案 1 :(得分:0)
尝试用
替换[[cell myImage]setImage:[arrayOfImages objectAtIndex:indexPath.item]];
NSString *imageName = [arrayOfImages objectAtIndex:indexPath.item];
[cell.myImage setImage:[UIImage imageNamed:imageName];
问题是,您现在正尝试将NSString
分配给应该是UIImage
的内容。