Я написал специальную функцию init-override, где я хочу передать индексный номер для вызова в массиве.Сам номер индекса определяется путем выбора таблицы в представлении таблицы пользователем.Итак ... выбранное число должно быть передано в функцию init и использовано там для дальнейшей обработки.
Что ж, теперь возникла моя проблема. По моему мнению, все методы, которые я создал, правильно закодированы.Но когда я нажимаю на свою определенную кнопку подключения, в консоли появляется сообщение об ошибке, что индекс выходит за пределы.Итак ... Я проверил массив для записей, и там все доступно.Так что номер индекса должен быть в порядке.
Возможно, к вашему сведению: я создал копию массива в TableViewController, который изначально находится в файле PortConnection.
Вот необходимые файлы.Кто-нибудь может дать мне руку помощи, где искать?
PORTTABLEVIEWCONTROLLER.M
- (IBAction)pushConnect:(id)sender {
NSInteger selectedRow = [tableView selectedRow];
[portConnection initPort:selectedRow];
}
- (id)init {
self = [super init];
if (self) {
// Initialization of port Connection instance
portConnection = [[PortConnection alloc] init];
// Fill array in Portconnection.m with devices
[portConnection listDevices];
// Fill tableView Data Array with data from portConnection array
self.tableViewDataArray = [NSMutableArray arrayWithArray:portConnection.portArray];
}
return self;
}
PORTCONNECTION.H
@
interface PortConnection : NSObject {
// Instance of AMSerialPort
AMSerialPort *port;
// Port Array to be filled with found ports
NSMutableArray *portArray;
}
// List Devices into an given array
- (void)listDevices;
// Connect to selected port
- (void)initPort:(NSInteger)selectedRow;
@property (nonatomic, retain) NSMutableArray *portArray;
@property (nonatomic, retain) AMSerialPort *port;
@end
PORTCONNECTION.M
@implementation PortConnection
@synthesize port;
@synthesize portArray;
#pragma mark -
#pragma mark Serial Port Access
- (void)listDevices {
// get an port enumerator
NSEnumerator *enumerator = [AMSerialPortList portEnumerator];
AMSerialPort *aPort;
while ((aPort = [enumerator nextObject])) {
[portArray addObject:[PortItem portItemWithTitle:[aPort name] andPath:[aPort bsdPath]]];
}
}
- (void)initPort:(NSInteger)selectedRow {
//Create object of selected port searched in array
PortItem *portSelected = [portArray objectAtIndex:selectedRow];
NSString *deviceNameSelected = [portSelected valueForKey:@"bsdPath"];
// Start Connection
if (![deviceNameSelected isEqualToString:[self.port bsdPath]]) {
[self.port close];
[self setPort:[[[AMSerialPort alloc] init:deviceNameSelected withName:deviceNameSelected type:(NSString *)CFSTR(kIOSerialBSDModemType)] autorelease]];
[self.port setDelegate:self.port];
if ([self.port open]) {
NSLog(@"Connected...");
[self.port setSpeed:B38400];
[self.port readDataInBackground];
} else {
NSLog(@"error connecting");
[self setPort:nil];
}
}
}
#pragma mark -
#pragma mark initialization / deallocation
- (id)init {
self = [super init];
if (self) {
portArray = [NSMutableArray array];
}
return self;
}
- (void)dealloc {
portArray = NULL;
[super dealloc];
}
@end
Ну ... моя идея в том, что что-то не так с методом INITPORT: (NSINTEGER) SELECTEDROW, но я совсем не уверен ....
Спасиботак много, что снова дал мне совет!
Себастьян