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

すべてのコードを表示していませんが、 IBOutletとしてではなく、の@propertyidTableViewとして宣言されています。MyTableController

NULL であることは、プロパティが適切なテーブル ビューに設定されていないことidTableViewを強く示唆しています。idTableViewいいえIBOutlet、NIB/XIB に接続できないことを意味します。したがって、修正はおそらくコンセントにしてNIBに接続することです。

明らかに、NULL[idTableView reloadData]の場合は効果がありません。idTableView

NIB がテーブル データ デリゲートとして設定されていると仮定しますMyTableController。これが、直接編集が機能する理由です。

さらに、これはあなたの問題に関連しているとは思いませんが、ベストプラクティスNSTableColumnとして、既存のテーブルで動作するように新しいテーブルを作成することは意味がありません[idTableView tableColumnWithIdentifier: @"Connections"].代わりに使用する必要があります.

于 2013-01-05T19:27:26.883 に答える