0

データソースがNSMutableArrayであるNSTableViewがあります。配列の数は、numberOfRowsInTableView:メソッドで返されます。

配列の内容を変更してreloadDataメソッドを実行するNSPopupButtonなどの他のコンポーネントを選択すると、テーブルが更新されます。

問題は、ある種のデータが相互に書き込まれることがあるということです。したがって、たとえば、カウントが4で、アクションが実行された後、それが10である場合、追加の6レコードが最初の4の下に書き込まれます。データ(正しいデータ)が表示されます。

コンソールに次のメッセージが表示されます

-[NSCFArray objectAtIndex:]: index(-1(or possibly larger)) beyond bounds (1056). 

エラーメッセージが境界を超えた配列であることを示しているように見えることは理解していますが、[array objectAtIndex:rowIndex]と言って、返されるだけの場合はどうすればよいでしょうか。

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

方法?

また、カウントの戻り値はnumberOfRowsInTableViewで返されます(数秒ごとにタイマーを使用してカウントをログに記録しているので、これはわかっています)。

何か案は?ありがとう!

編集1: 次のようにデータを返します:

pc = [[PrinterClass alloc]init];
pc = [ads_printers_array objectAtIndex:rowIndex];       

            if (aTableColumn == tc_make)    
                return [pc make];

            if (aTableColumn == tc_model)           
                return [pc model];

            if (aTableColumn == tc_driver_name)         
                return [pc ppd];

            if (aTableColumn == tc_rdp_driver)      
            {
                if ([pc decider] == 1)
                    return [pc rdp];

                else return [pc model]; 
            }

上で述べた配列は、PrintersClassと呼ばれる私が作成したクラスのオブジェクトで満たされています。

データをリロードするには、通常どおりデータをリロードします。

[ads_rdp_driver_table reloadData];  

ads_rdp_driver_tableがtableView名です。

問題は、この問題が特定のポイントではなくランダムな間隔で発生しているということです。だから指が上がらない。

4

1 に答える 1

0

デリゲートとデータソースを接続したことを100%確信していますか?

コードでこれを行うこともできます

ads_rdp_driver_table.datasource = self;
ads_rdp_driver_table.delegate = self;

これをf.exに追加します。ペン先から目を覚まします。

また、テーブルビュー自体をiboutletに接続する必要があります。そうしないと、名前で呼び出すことができません。

于 2012-05-23T13:37:42.783 に答える