从多视图应用程序中的每个视图发送串行数据

时间:2013-05-23 05:28:06

标签: ios objective-c cocoa-touch serial-port

我有一个用于电机控制的多视图(控制器)应用程序。

主页面选择功能(哪些电机)然后转到另一个页面(viewcontroller)以移动那些相关的电机 (加上范围,减去范围并在每个视图控制器上停止加上紧急停止)。

使用redpark串行电缆作为初始版本(稍后再说)。 我有主视图控制器发送串行数据但无法让其他视图控制器发送数据。

最好的办法是什么?

我已经尝试让每个视图控制器成为redparks rscMgr的委托但它不起作用 (除非我做的事情真的很愚蠢,这是可能的)

例如

inviewcontrollerx.h

#import "RscMgr.h"

#define BUFFER_LEN 1024


@interface FBInfoViewController : UIViewController <RscMgrDelegate> {
    RscMgr *rscMgr;
    UInt8 rxBuffer[BUFFER_LEN];
    UInt8 txBuffer[BUFFER_LEN];
    BOOL cableConnected;

}

@property (nonatomic, strong) RscMgr *rscMgr;

@end


them in each one viewcontrollerx.m
- (void) viewDidLoad{
[super viewDidLoad];
rscMgr = [[RscMgr alloc] init];
[rscMgr ssetDelegate:self];

//etc

}



- (BOOL) sendMessage:(NSString *)Tmessage {

    NSLog(@"sendMSG: ");
    NSLog(@"String: %@", Tmessage);

    int bytesToWrite = Tmessage.length;

    for (int i =0;i < bytesToWrite; i++ ) {
    self->txBuffer[i] = (int)[Tmessage characterAtIndex:i];
    }

    NSLog(@"BYTES WRITTEN = %d", Tmessage.length);
    NSLog(@"Msg = %@", Tmessage);    

    int bytesWritten = [self->rscMgr write:txBuffer length:bytesToWrite];
    NSLog(@"Wrote %d bytes to serial cable.", bytesWritten);

    if (bytesWritten == bytesToWrite)
    {
    return TRUE;
    }
    else
    {
    return FALSE;
    }
}


then send a message by 
[self sendMSG : @"<VC20c203l,888c99>\n\r"];

只有主(初始视图控制器)发送串行数据。 我需要单独的“页面”,以便用户可以一次调整一个设置/位置。

1 个答案:

答案 0 :(得分:1)

建议您重新架构并使用单独的对象来控制电机和串行连接。使它成为单身,所有其他对象都可以轻松找到并与之通信。如果这些应用需要在某些事件发生时得到通知,请让它发送通知。这是经典的风格。