2011-08-23 2 views
0

난 코코아 초보 다. 텍스트 열이있는 NSTableView와 선택한 행의 텍스트를 보여주는 미리보기 NSTextView 필드가 포함 된 코코아 응용 프로그램이 있습니다. NSTableView 업데이트/다시로드 문제

  • 대리인과는 dataSource는

    1. 내가 사용하지 않는 바인딩이 제대로 표가 성공적으로있는 NSMutableArray을 MyObject의 지금

    , 내가 추가하거나 삭제할 수있는 행의 사용

  • 설정합니다. 선택 영역을 변경할 수 있으며 해당하는 선택한 텍스트가 UITextView에 나타납니다.

    문제점 : NSTextView를 사용하여 행/열의 값을 변경/편집하자 마자 NSTableView가 NSMutableArray를 방해하고 잘못된 데이터를 표시합니다. 그 후 선택 항목을 변경하면 테이블보기에서 다른 상태가 표시됩니다. 첨부 된 스크린 샷을 참조하십시오.

    상태 1 (표시 채워진 데이터)

    State 1

    상태 2 (행 선택 변경)

    State 2

    이 상태 3 (행 선택 변경)

    State 3

    주 4 : (! 값을 편집 할 약)

    State 4

    주 5 : (하이라이트/행 선택 # 1)

    State 5

    주 6 : (하이라이트/행 선택 # 2)

    State 6

    은 내가 UPD를 얻기 위해 다음과 같은 방법을 사용하고 있습니다 UITextView에서 ated에 값 :

    - (void)textDidEndEditing:(NSNotification *)notification { 
        id sender = [notification object]; 
        NSString * theString = [sender string]; 
    
        NSInteger selectedRow = [_myTableView selectedRow]; 
    
        if (selectedRow < 0 || selectedRow > [_myArray count] - 1) return; 
    
        MyObject *rowObject = [_myArray objectAtIndex:selectedRow]; 
        rowObject.text = theString; 
    
        // Update table 
        [_myTableView reloadData]; 
    } 
    

    나는 NSTableView는에서 명백한 다시로드 버그에 대한 해결 방법을 구현하기 위해 노력했습니다, 그러나 이것은 나를 위해 작동하지 않습니다

    - (void)tableViewSelectionIsChanging:(NSNotification *)notification { 
    
        if ([notification object] == _myTableView) { 
         [_myTableView noteNumberOfRowsChanged]; 
        } 
    } 
    

    을 나는 식별에 어떤 도움을 주셔서 감사합니다 문제의 근원.

  • 답변

    0

    수많은 시간을 낭비하고 마침내 문제를 해결할 수있었습니다. textDidEndEditing : 메소드의 수정 된 내용은 다음과 같습니다.

    - (void)textDidEndEditing:(NSNotification *)notification { 
        id sender = [notification object]; 
        NSString * theString = [sender string]; 
    
        NSInteger selectedRow = [_myTableView selectedRow]; 
    
        if (selectedRow < 0 || selectedRow > [_myArray count] - 1) return; 
    
        MyObject *rowObject = [_myArray objectAtIndex:selectedRow]; 
    
        // Problematic! 
        // rowObject.text = theString; 
    
        // Working! 
        rowObject.text = [NSString stringWithString:theString]; 
    
        // Update table 
        [_myTableView reloadData]; 
    } 
    
    +1

    왜 'rowObject.text = [theString copy];'가 아닌가? :) – Elland