2014-11-05 3 views
2

반환하는 내용과 상관없이 테이블보기는 .xib 파일에서 수동으로 설정된 표시 텍스트 (NSTextField의 'Title') 만 표시합니다. 내가 뭘 잘못하고 있는지 알아내는 데 도움주세요. 감사.NSTableView는 objectValueForTableColumn 메서드의 반환 값을 표시하지 않습니다.

내 NSTableView에는 1 개의 열만 있습니다.

#import "DeviceSettingsController.h" 
#import <ImageCaptureCore/ImageCaptureCore.h> 

@interface DeviceSettingsController() 
@property (weak) IBOutlet NSTableView *tableViewScanners; 
@property (weak) IBOutlet NSMatrix *checkBoxes; 
@property NSMutableArray *availableScanners; 
@property ICDeviceBrowser *deviceBrowser; 
@end 

@implementation DeviceSettingsController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _availableScanners = [[NSMutableArray alloc] init]; 
    _deviceBrowser = [[ICDeviceBrowser alloc] init]; 
    _tableViewScanners.delegate = self; 
    _tableViewScanners.dataSource = self; 
    _deviceBrowser.browsedDeviceTypeMask = ICDeviceTypeMaskScanner | ICDeviceLocationTypeMaskLocal | ICDeviceLocationTypeMaskShared | ICDeviceLocationTypeMaskBluetooth | ICDeviceLocationTypeMaskBonjour; 
    _deviceBrowser.delegate = self; 
    [_deviceBrowser start];  
} 

- (id)initWithMainView:(NSView *)_theView AndMainController:(NSViewController *)_theViewController AndNibName:(NSString *)nibName AndArgs:(NSArray *)_args { 
    self = [super initWithMainView:_theView AndMainController:_theViewController AndNibName:nibName AndArgs:_args]; 
    return self; 
} 

- (void)deviceBrowser:(ICDeviceBrowser *)browser didAddDevice:(ICDevice *)device moreComing:(BOOL)moreComing { 
    [_availableScanners addObject:device]; 
    [_tableViewScanners reloadData]; 
} 

- (void)deviceBrowser:(ICDeviceBrowser *)browser didRemoveDevice:(ICDevice *)device moreGoing:(BOOL)moreGoing { 
    [_availableScanners removeObject:device]; 
    [_tableViewScanners reloadData]; 
} 

- (void)didRemoveDevice:(ICDevice *)device { 

} 

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    return [_availableScanners count]; 
} 

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    NSString *retVal = [((ICScannerDevice *)[_availableScanners objectAtIndex:row]) name]; 

    return retVal; 
} 
@end 
+0

다음과 같이 너무 일반적인 구현이 될 것이다, 또한 Apple Docs를 참조하면

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 

를 사용할 필요가 당신 때문에 대신 objectValueForTableColumn (기반 셀)의 XIB를 언급하기 때문에이보기를 기반으로 가정 내 대답 [여기] (https://stackoverflow.com/questions/26330468/nsoutlineview-object-value-is-being-returned-but-only-the-placeholder-title/26331214#26331214)을 참조하십시오. –

답변

8

가되어있는 tableview 콘텐츠 모드를 기반으로 셀 또는 뷰를 기반으로 : 여기

코드인가? 나는

- (NSView *)tableView:(NSTableView *)tableView 
    viewForTableColumn:(NSTableColumn *)tableColumn 
        row:(NSInteger)row { 

     // Retrieve to get the @"MyView" from the pool or, 
     // if no version is available in the pool, load the Interface Builder version 
     NSTableCellView *result = [tableView makeViewWithIdentifier:@"MyView" owner:self]; 

     // Set the stringValue of the cell's text field to the nameArray value at row 
     result.textField.stringValue = [self.nameArray objectAtIndex:row]; 

     // Return the result 
     return result; 
} 
관련 문제