0

我有 3 节课:

LocalRoom.m

- (void) handleNewConnection:(Connection*)connection {
    NSString* number = @"10";
    AppDelegate *theAppDelegate = [[NSApplication sharedApplication] delegate];
    [theAppDelegate connectionNumber:number currentZoneName:@"Zone1";
}

触发器 ----->

AppDelegate.h

MyTableController *tableController;

AppDelegate.m

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    tableController = [[MyTableController alloc] init];
}

- (void)connectionNumber:(NSString *)number zoneName:(NSString *)currentZoneName {
    if ([currentZoneName isEqualToString:zoneName1]) {
        [tableController changeConnections:number withRowNumber:0];
    }
}

触发器 ----->

MyTableController.h

@interface MyTableController : NSControl {
IBOutlet NSTextField *zoneNameTextField;  
}
@property (retain) NSTableView * idTableView;
- (void) changeConnections:(NSString *)number withRowNumber:(int)rowNumber;

MyTableController.m

- (void) changeConnections:(NSString *) number withRowNumber:(int) rowNumber{

    NSRunAlertPanel([NSString stringWithFormat:@"%d", rowNumber], number, @"", @"", @"");

    NSTableColumn *tableColumn = [[NSTableColumn alloc] initWithIdentifier: @"Connections"];

    [self tableView:idTableView setObjectValue:number forTableColumn:tableColumn row:rowNumber];

    [idTableView reloadData];

}

我的 NSRunAlertPanel 提出了正确的值,但我的 NSTextView 没有改变。当我将 NSTableView 的“编辑”代码放在 MyTableController.m 的 IBAction 中时,它可以工作。我检查了 idTableView 是否为 NULL,确实如此。这很奇怪。因此,当 AppDelegate 运行 changeConnections 时,我感觉发生了一些奇怪的事情。我遇到了类似的问题,nstextfield 不返回数据。修复方法是通过AppDelegate *theAppDelegate = [[NSApplication sharedApplication] delegate];在这种情况下是否有类似的东西来初始化它?

您可能想知道为什么我只是不从 LocalRoom 调用 MyTableController,而是在应用程序委托中设置并找到了“zoneName1”。

提前致谢!

4

1 回答 1

0

您没有显示所有代码,但idTableView被声明为@property of MyTableController,而不是IBOutlet

那是idTableViewNULL 强烈表明该idTableView属性永远不会设置为适当的表视图。不IBOutlet,因为它意味着它不能在 NIB/XIB 中连接。所以修复可能是让它成为一个插座并将它连接到NIB中。

显然,如果为 NULL[idTableView reloadData]则无效。idTableView

我假设您的 NIB 确实设置MyTableController为其表数据委托,这就是直接编辑可以工作的原因。

此外,尽管我认为这与您的问题无关,但对于最佳实践来说,制造一个新NSTableColumn的以在您现有的桌子上工作是没有意义的——您应该[idTableView tableColumnWithIdentifier: @"Connections"]改用它。

于 2013-01-05T19:27:26.883 回答