gpt4 book ai didi

objective-c - 如何从表数据源访问数组?

转载 作者:行者123 更新时间:2023-12-03 17:16:08 25 4
gpt4 key购买 nike

我正在开始我的第一个 cocoa 项目。我有一个严重的(对我来说)但也许很容易(对你来说)的问题需要解决,我需要一些指导从哪里开始。

简短描述:我构建了一个类“PortConnection.h”,当调用函数 -listPorts 时,它将外部类 (AMSerial.h) 找到的所有端口写入数组。这是 PortConnection.h 的代码

#import <Cocoa/Cocoa.h>
#import "AMSerialPortList.h"
#import "AMSerialPortAdditions.h"
#import "AMSerialPort.h"

@interface PortConnection : NSObject {
@private
AMSerialPort *port;
NSMutableArray *portArray;
}

- (void)listDevices;

@property (nonatomic, retain) NSMutableArray *portArray;
@property (nonatomic, retain) AMSerialPort *port;

@end

并遵循 PortConnection.m

#import "PortConnection.h"
#import "AMSerialPortList.h"
#import "AMSerialPortAdditions.h"
#import "AMSerialPort.h"

@implementation PortConnection
@synthesize portArray;
@synthesize port;

- (void)listDevices
{
// get an port enumerator
NSEnumerator *enumerator = [AMSerialPortList portEnumerator];
AMSerialPort *aPort;

while ((aPort = [enumerator nextObject]))
{
// Add Devices to Array
[portArray addObject:[aPort bsdPath]];

}
}

到目前为止,一切正常。现在我的问题

我在 GUI 中实现了一个 tableView,用于显示上面调用的方法的结果。该文件名为“PortTableViewController.h”,是我的 TableView 的数据源。

这是 .h 文件

#import <Foundation/Foundation.h>
#import "PortConnection.h"


@interface PortTableViewController : NSObject <NSTableViewDataSource> {
@private
IBOutlet NSTableView *portTableView;
}

@property (assign) IBOutlet NSTableView *portTableView;

@end

这是 .m 文件:

#import "PortTableViewController.h"
#import "PortConnection.h"


@implementation PortTableViewController
@synthesize portTableView;

#pragma mark -
#pragma mark TableView Delegates


- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
PortConnection *portConnection = [[PortConnection alloc] init];
[portConnection listDevices];
return [portConnection.portArray count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
??????? I DO NOT HAVE A CLUE HOW TO ACCESS THE ARRAY IN PORTCONNECTION.M CORRECTLY
}

@end

问题:

1) 当查看 TableViewDataSourceDelegates 时,如何正确访问 PortConnection.m 类中填充的 portArray。它似乎不像我那样工作。

2) 每次我想在 tableviewdelegate 方法中从中检索数据时,是否都必须从 Portconnection.h 创建一个对象?

我真的很感谢大家的帮助!我想学点东西..我非常感谢您的支持!谢谢..为了帮助我提出问题,不要犹豫。我真的很感激......

谢谢塞巴斯蒂安

最佳答案

一个简单的修复方法是让您的 TableView Controller 声明一个包含 PortConnection 实例的实例变量。该实例在 -init 中创建并发送 -listDevices,它被 TableView Controller 中的所有方法使用(这意味着所有方法都引用相同的 PortConnection实例),并在-dealloc中释放。

例如:

PortTableViewController.h

#import <Foundation/Foundation.h>
#import "PortConnection.h"


@interface PortTableViewController : NSObject <NSTableViewDataSource> {
@private
IBOutlet NSTableView *portTableView;
PortConnection *portConnection;
}

@property (assign) IBOutlet NSTableView *portTableView;

@end

PortTableViewController.m

#import "PortTableViewController.h"
#import "PortConnection.h"

@implementation PortTableViewController
@synthesize portTableView;

#pragma mark -
#pragma mark TableView Delegates

- (id)init {
self = [super init];
if (self) {
portConnection = [[PortConnection alloc] init];
[portConnection listDevices];
}
return self;
}

- (void)dealloc {
[portConnection release];
[super dealloc];
}

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

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
return [portConnection.portArray objectAtIndex:row];
// or whatever behaviour provides an object value for the column/row
}

@end

关于objective-c - 如何从表数据源访问数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6208955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com