0

我想在我的項目中以編程方式添加UICollectionView與自定義UICollectionViewCell。應用程序崩潰,同時以編程方式添加UICollectionView

這裏是我的實現添加的CollectionView

- (void)setUpCollectionView{ 
    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init]; 
    layout.scrollDirection = UICollectionViewScrollDirectionVertical; 
    [layout setMinimumLineSpacing:1]; 
    [layout setMinimumInteritemSpacing:1]; 
    [layout setSectionInset:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [layout setScrollDirection:UICollectionViewScrollDirectionVertical]; 

    self.collectionView =[[UICollectionView alloc] initWithFrame:self.vwChecklistsContainer.frame collectionViewLayout:layout]; 
    [self.collectionView setDataSource:self]; 
    [self.collectionView setDelegate:self]; 

    UINib *cellNib = [UINib nibWithNibName:@"MyChecklistsCell" bundle:nil]; 
    [self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"MyChecklistsCell"]; 
    [self.vwChecklistsContainer addSubview:self.collectionView]; 
} 

這種 「setUpCollectionView」 功能,從我的視圖控制器的viewDidLoad中()調用。

我剛在MyChecklistsCell中實現了這兩個函數。

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    // Initialization code 
} 

- (void)setData:(NSDictionary *)dict{ 
    self.lblChecklistType = dict[SERVER_CHECKLIST_TYPE]; 
    self.lblEndTime = dict[SERVER_END_TIME]; 
    self.lblStartTime = dict[SERVER_START_TIME]; 
    self.lblDescription = dict[SERVER_DESCRIPTION]; 
} 

任何人都可以幫助我嗎?謝謝。

+0

「應用程序崩潰」:什麼是錯誤信息? – Larme

+0

@Larme只顯示此錯誤消息「 - [__ NSCFNumber長度]:無法識別的選擇器發送到實例0xb000000000000043」 –

+0

@NyeinEiEiTun setData方法中的問題 –

回答

1

試試這個。

- (void)setData:(NSDictionary *)dict{ 
     self.lblChecklistType = [NSString stringWithFormat:@"%@",dict[SERVER_CHECKLIST_TYPE]]; 
     self.lblEndTime = [NSString stringWithFormat:@"%@",dict[SERVER_END_TIME]]; ; 
     self.lblStartTime = [NSString stringWithFormat:@"%@",dict[SERVER_START_TIME]]; ; 
     self.lblDescription = [NSString stringWithFormat:@"%@",dict[SERVER_DESCRIPTION]]; 
    } 

錯誤表示您在NSNumber上使用NSString方法。請檢查您的數據是否是字符串。

希望它有幫助。

+0

奇怪!委託函數「cellForItemAtIndexPath」甚至沒有被觸發。因爲我在該代理中調用了setData函數。我在這行後崩潰了「[self.vwChecklistsContainer addSubview:self.collectionView];」從「setUpCollectionView」功能。 –

+0

最後我找到了問題的根源。你是對的。在將數據設置爲UICollectionView之前,我需要將數據設置爲myViewController視圖中的標籤。當我將數據設置到ViewController時,我沒有將值轉換爲String。這就是我得到錯誤的原因。感謝您的回答。 –

1

看起來像你試圖將標籤設置爲NSNumber。這裏的問題是使用字典來保存數據,而不進行任何類型檢查。考慮使用對象來存儲數據,而不是字典。這會讓你更清楚你試圖設置和避免未來問題的屬性。

或者,您所評論的錯誤消息似乎只引用了內存地址,而不是可能表明您沒有正確保留集合視圖或其他屬性的對象 - 您是否仔細檢查了所有引用是正確的強還是弱?

+0

奇怪!委託函數「cellForItemAtIndexPath」甚至沒有被觸發。因爲我在該代理中調用了setData函數。我在這行後崩潰了「[self.vwChecklistsContainer addSubview:self.collectionView];」從「setUpCollectionView」功能。 –

+0

最後我發現了問題的根源。你是對的。在將數據設置爲UICollectionView之前,我需要將數據設置爲myViewController視圖中的標籤。當我將數據設置到ViewController時,我沒有將值轉換爲String。這就是我得到錯誤的原因。感謝您的回答。 –

相關問題