0

내 프로젝트에서 UICollectionViewCell을 프로그래밍 방식으로 UICollectionViewCell에 추가하려고합니다. 응용 프로그램에서 UICollectionView를 프로그래밍 방식으로 추가하는 동안 크래시가 발생합니다.

다음은이 "setUpCollectionView"기능 내의 ViewController의 viewDidLoad에()에서 호출 된 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]; 
} 

를 추가하는 내 구현입니다.

방금 ​​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 length] : 인식 할 수없는 선택기가 인스턴스 0xb000000000000043으로 전송되었습니다." –

+0

setData 메서드의 NyeinEiEiTun 문제 –

답변

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 메서드를 사용하고 있음을 나타냅니다. Plese, 데이터가 문자열인지 확인하십시오.

희망이 있습니다.

+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으로 변환하지 않았습니다. 그것이 내가 오류를 얻은 이유입니다. 귀하의 답변에 감사드립니다. –