2016-01-02 35 views
-1

我有一個視圖控制器,並在該視圖控制器,我有一個按鈕。單擊該按鈕將在視圖中滑動(ToolOptionsView)。在該視圖中我有一個集合視圖中添加,但我有這個錯誤[UICollectionViewCell setItemDictionary:]:無法識別的選擇器發送到實例

[UICollectionViewCell setItemDictionary:]:無法識別的選擇發送到實例

以下是我ToolOptionsView.m文件 -

#import "ToolOptionsView.h" 

@interface ToolOptionsView() 

@property(nonatomic, strong) NSMutableArray *toolsList; 
@property(nonatomic, strong) NSMutableDictionary *tools; 

@end 

@implementation ToolOptionsView 

-(id)initWithFrame:(CGRect)frame{ 
    self=[super initWithFrame:frame]; 
    if(self){ 
     [self setToolsList]; 

     UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init]; 
     flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; 

     self.toolsCollectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) collectionViewLayout:flowLayout]; 
     self.toolsCollectionView.delegate = self; 
     self.toolsCollectionView.dataSource=self; 
     [self.toolsCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"toolsCell"]; 

     [self addSubview:self.toolsCollectionView]; 

    } 
    return self; 
} 


-(void)setToolsList{ 
    self.toolsList =[[NSMutableArray alloc]init]; 

    self.tools =[[NSMutableDictionary alloc]init]; 
    [self.tools setObject:@"Food" forKey:@"title"]; 
    [self.tools setObject:@"food.png" forKey:@"iconImage"]; 

    [self.toolsList addObject:self.tools]; 

    self.tools =[[NSMutableDictionary alloc]init]; 
    [self.tools setObject:@"Drinks" forKey:@"title"]; 
    [self.tools setObject:@"drinks.png" forKey:@"iconImage"]; 

    [self.toolsList addObject:self.tools]; 

    self.tools =[[NSMutableDictionary alloc]init]; 
    [self.tools setObject:@"Near By Restaurants" forKey:@"title"]; 
    [self.tools setObject:@"Restaurants.png" forKey:@"iconImage"]; 

    [self.toolsList addObject:self.tools];  
} 

#pragma mark- 
#pragma mark- UICollectionViewDatasource method 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ 

    return [self.toolsList count]; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    MenuItemCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"toolsCell" forIndexPath:indexPath]; 
    NSMutableDictionary *dict = [self.toolsList objectAtIndex:indexPath.row]; 
    cell.itemDictionary = dict; 
    return cell; 
} 
@end 

,這裏是我的MenuItemCollectionViewCell.h-

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 
#import <CoreGraphics/CoreGraphics.h> 

@interface MenuItemCollectionViewCell : UICollectionViewCell 

@property(nonatomic, strong) UIImageView *iconImageView; 
@property(nonatomic, strong) UILabel *iconLabel; 

@property(nonatomic, strong) NSMutableDictionary *itemDictionary; 

@end 

,這裏是從dequeResuableCellWithIdentifier返回MenuItemCollectionViewCellMenuItemCollectionViewCell.m文件 -

#import "MenuItemCollectionViewCell.h" 

@implementation MenuItemCollectionViewCell 

-(void)awakeFromNib{ 
    self.iconImageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, self.bounds.size.width-40, self.bounds.size.height-40)]; 
    self.iconImageView.image = [UIImage imageNamed:[self.itemDictionary objectForKey:@"iconImage"]]; 
    [self addSubview:self.iconImageView]; 
    self.iconLabel = [[UILabel alloc]initWithFrame:CGRectMake(5, 23 + self.iconImageView.bounds.size.height, self.bounds.size.width-10 , 16)]; 
    self.iconLabel.text = [self.itemDictionary objectForKey:@"title"]; 
    [self addSubview:self.iconLabel]; 
} 

@end 
+0

您是否正確設置了標識符和類?看起來你正在獲得一個通用的'UICollectionViewCell'而不是'MenuItemCollectionViewCell'。 – luk2302

+0

謝謝,這是問題所在。我註冊了我的標識符UiCollectionViewCell,而我應該爲MenuItemCollectionViewCell完成。你可以請你的建議作爲答覆,以便我可以接受它。 – Natasha

回答

1

在行

[self.toolsCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"toolsCell"]; 

您註冊類UICollectionViewCell的標識符,但實際上應該註冊自定義類MenuItemCollectionViewCell

[self.toolsCollectionView registerClass:[MenuItemCollectionViewCell class] forCellWithReuseIdentifier:@"toolsCell"]; 
0

最有可能的小區不是。
將斷點該方法後,檢查什麼TIPE細胞中的調試器返回,只寫po cell.class

+0

不,這是,但更安全的方式將無論如何像 - MenuItemCollectionViewCell * cell =(MenuItemCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@「toolsCell」forIndexPath:indexPath]; – Natasha

相關問題