2014-05-15 6 views
2

최근에 내 앱에서이 문제를 발견했으며 어떻게/왜 발생했는지 파악할 수 없어 예외적 인 것처럼 보입니다. 언제 예측할 수 있습니다. 내 UITableView 하위 클래스로로드 오전 정의 UITableViewCell있다. 나는 항상 tableView에 5 개의 세포 만 가지고 있으며, 프로토 타입이 아닌 정적이다. 내가 가지고있는 문제는 언젠가 내가 나의 셀 중 하나를 선택했다는 모달 뷰를 무시하고, 다른 셀은 버그가 발생한다는 것입니다. 내가 셀을 만지 •맞춤형 셀 선택 문제에서 모달보기 컨트롤러가 깨졌습니다 - iOS 7

와 내가 셀 • 계속을 눌러 SEGUE이

을 수행 셀을 터치 한 후 약 10 + 초 • 계획

로 SEGUE을 수행 여기에 무슨이다 아무 일도 일어나지 않지만보기의 다른 곳을 터치하면 단색이 수행됩니다.

"Here"게시 된 문제와 매우 유사합니다.

여기 내 코드입니다 : 당신이 (송신자가이 경우 자체입니다) 셀에서 또는의 ViewController에서 스토리 보드에 SEGUE 경우

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     //[super tableView:tableView didSelectRowAtIndexPath:indexPath]; 
     //self.selectedObject = [self.objects objectAtIndex:indexPath.row]; 
     NSLog(@"I DID SELECT path %ld", (long)indexPath.row); 
     [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 

     if(indexPath.row == 0 && self.matchOneSetNum <= 3) 
     { 
      self.whereFrom = 1; 
      [self performSegueWithIdentifier:@"enterScoresSegue" sender:self]; 
     } 

     if(indexPath.row == 1 && self.matchTwoSetNum <= 3) 
     { 
      self.whereFrom = 2; 
      [self performSegueWithIdentifier:@"enterScoresSegue" sender:self]; 
     } 

     if(indexPath.row == 2 && self.matchThreeSetNum <= 3) 
     { 
      self.whereFrom = 3; 
      [self performSegueWithIdentifier:@"enterScoresSegue" sender:self]; 
     } 

     if(indexPath.row == 3 && self.matchFourSetNum <= 3) 
     { 
      self.whereFrom = 4; 
      [self performSegueWithIdentifier:@"enterScoresSegue" sender:self]; 
     } 

     if(indexPath.row == 4 && self.matchFiveSetNum <= 3) 
     { 
      self.whereFrom = 5; 
      [self performSegueWithIdentifier:@"enterScoresSegue" sender:self]; 
     } 


    } 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

    if([segue.identifier isEqualToString:@"enterScoresSegue"]) 
    { 
     // Get the new view controller using [segue destinationViewController]. 
     // Pass the selected object to the new view controller. 
     UINavigationController *newView = (UINavigationController *)[segue destinationViewController]; 
     EnterScoresViewController *enter = newView.topViewController; 
     enter.myDelegate = self; 
     enter.otherTeam = self.otherTeam; 

     if(self.whereFrom == 1) 
     { 

      enter.match = self.matchOne; 
      enter.setNumber = self.matchOneSetNum; 
      enter.matchOnePlayer = self.playerName; 
     } 

     if(self.whereFrom == 2) 
     { 

      enter.match = self.matchTwo; 
      enter.setNumber = self.matchTwoSetNum; 
      enter.matchTwoPlayer = self.playerNameTwo; 
     } 

     if(self.whereFrom == 3) 
     { 

      enter.match = self.matchThree; 
      enter.setNumber = self.matchThreeSetNum; 
      enter.matchThreePlayer = self.playerNameThree; 
     } 

     if(self.whereFrom == 4) 
     { 

      enter.match = self.matchFour; 
      enter.setNumber = self.matchFourSetNum; 
      enter.matchFourPlayers = self.playerStringsFour; 
     } 

     if(self.whereFrom == 5) 
     { 

      enter.match = self.matchFive; 
      enter.setNumber = self.matchFiveSetNum; 
      enter.matchFivePlayers = self.playerStringsFive; 
     } 
    } 

} 
+0

문제를 해결하는 데 유용한 코드가 있습니까? –

+0

죄송합니다. – Jacob

+1

앞으로는 [질문하는 방법] (http://stackoverflow.com/help/how-to-ask)에서 멋진 질문을하는 방법에 대한 팁을 참조하십시오. –

답변

3

나를 위해 문제를 해결 비슷한 질문에 대한 대답은, 여기에 링크입니다 있었다 : 여기에 전체 텍스트입니다 https://stackoverflow.com/a/23747207/2584268

그리고 :

애플이 추가로 응답 레이다를 작성 후 :

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
: 트릭을 수행하는 다음과 같은 방법의 말에
dispatch_async(dispatch_get_main_queue(), ^{}); 

컨트롤러를 표시하는 방법에서 아무런 명령도 입력하지 않고 블록을 예약하면 실행 루프가 강제로 회전하여 지연이 발생하지 않습니다.

레이더 참조 번호 : 15196237, 다른 파일을 등록하고 참조하십시오.

0

wendrring, 셀에서 보낸 사람이 너무 셀을해야합니다.

[self performSegueWithIdentifier : @ "enterScoresSegue"보낸 사람 : [self.tableView cellForRowAtIndexPath : indexPath]];

+0

보기 컨트롤러에서보기가 있습니다 – Jacob