0

アプリを実行すると、シグナル 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
4

2 に答える 2

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を be arrayOfImageNames(または単に、または何でも) に変更することもできます。imageNames

(ところで、実際の画像を配列に入れないようにするのは良いことでした。配列cellForItemAtIndexPath内の画像名に基づいて常に画像オブジェクトを作成する必要があります。)

于 2013-07-17T17:35:58.083 に答える
0

で置き換え[[cell myImage]setImage:[arrayOfImages objectAtIndex:indexPath.item]];てみてください

NSString *imageName = [arrayOfImages objectAtIndex:indexPath.item];
[cell.myImage setImage:[UIImage imageNamed:imageName];

NSString問題は、現在、 であるべきものにを割り当てようとしていることUIImageです。

于 2013-07-17T17:16:33.650 に答える