【发布时间】:2015-04-08 05:42:33
【问题描述】:
您好,我是 IOS 的新手,我正在学习使用 RedPark 电缆将字符串写入串行的示例代码。 我有我正在学习的示例代码,它可以工作并且可以将字符串发送到 Arduino Serial。 另外,我有我正在编写的基于示例代码的代码,它现在不起作用。 我已经尝试了几天并在网上搜索了很多,但仍然无法弄清楚为什么我的代码不起作用。
谁能告诉我为什么我的代码不起作用?
**************************************************** * 有效的示例代码 ************************************** Appdelegate.h
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@end
AppDelegate.m
#import "AppDelegate.h"
#import "JMTerminalViewController.h"
#import "JMTerminalViewModel.h"
#import "RscMgr.h"
@implementation AppDelegate
{
@private
UIWindow* _mainWindow;
JMTerminalViewController* _terminalViewController;
RscMgr* _serialManager;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_serialManager = [[RscMgr alloc]init];
JMTerminalViewModel* terminalViewModel = [[JMTerminalViewModel alloc]initWithSerialManager:_serialManager];
_terminalViewController = [[JMTerminalViewController alloc]initWithViewModel:terminalViewModel];
UINavigationController* navigationController = [[UINavigationController alloc]initWithRootViewController:_terminalViewController];
_mainWindow = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
_mainWindow.rootViewController = navigationController;
[_mainWindow makeKeyAndVisible];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
}
JMTerminalViewModel.h
#import <Foundation/Foundation.h>
@class RscMgr;
@interface JMTerminalViewModel : NSObject
@property (readonly) BOOL connected;
@property (nonatomic, strong, readonly) NSString* receivedText;
-(instancetype)initWithSerialManager:(RscMgr*)serialManager;
-(void) sendMessage:(NSString*)message;
@end
JMTerminalViewModel.h
#import <UIKit/UIKit.h>
@class JMTerminalViewModel;
@interface JMTerminalViewController : UIViewController
-(instancetype)initWithViewModel:(JMTerminalViewModel*)viewModel;
@end
JMTerminalViewController.h
#import "JMTerminalViewController.h"
#import "JMTerminalView.h"
#import "JMTerminalViewModel.h"
#import "RscMgr.h"
@interface JMTerminalViewController () <UITextFieldDelegate>
@end
@implementation JMTerminalViewController
{
@private
JMTerminalViewModel* _viewModel;
RscMgr* manager;
}
-(instancetype)initWithViewModel:(JMTerminalViewModel *)viewModel
{
self = [super init];
if (self)
{
_viewModel = viewModel;
}
return self;
}
-(void)loadView
{
self.view = [[JMTerminalView alloc]init];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationItem.title = @"Disconnected";
JMTerminalView* terminalView = (JMTerminalView*)self.view;
terminalView.inputTextField.delegate = self;
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
JMTerminalView* terminalView = (JMTerminalView*)self.view;
terminalView.inputTextField.delegate = nil;
}
#pragma mark - Text field delegate
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[_viewModel sendMessage:@"w2Open@w1Open@w2Open@"];
textField.text = nil;
return NO;
}
@end
JMTerminalView.h
#import <UIKit/UIKit.h>
@interface JMTerminalView : UIView
@property (nonatomic, strong, readonly) UITextField* inputTextField;
@property (nonatomic, strong, readonly) UITextView* receivingTextView;
@property CGFloat bottomOffset;
@end
JMTerminalView.m
#import "JMTerminalView.h"
@implementation JMTerminalView
{
@private
NSLayoutConstraint* _bottomConstraint;
}
- (instancetype)init
{
self = [super init];
if (self)
{
self.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];
_inputTextField = [[UITextField alloc]init];
_inputTextField.borderStyle = UITextBorderStyleRoundedRect;
_inputTextField.translatesAutoresizingMaskIntoConstraints = NO;
[_inputTextField setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
_receivingTextView = [[UITextView alloc]init];
_receivingTextView.backgroundColor = [UIColor whiteColor];
_receivingTextView.translatesAutoresizingMaskIntoConstraints = NO;
_receivingTextView.editable = NO;
_receivingTextView.font = [UIFont systemFontOfSize:18.0];
_receivingTextView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
[self addSubview:_receivingTextView];
[self addSubview:_inputTextField];
_bottomConstraint = [NSLayoutConstraint constraintWithItem:_inputTextField attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-5];
[self addConstraint:_bottomConstraint];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_inputTextField attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeHeight multiplier:0.0 constant:35]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_receivingTextView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_receivingTextView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_inputTextField attribute:NSLayoutAttributeTop multiplier:1.0 constant:-5]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"| [_receivingTextView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_receivingTextView)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-5-[_inputTextField]-5-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_inputTextField)]];
}
return self;
}
-(void)setBottomOffset:(CGFloat)bottomOffset
{
_bottomConstraint.constant = -bottomOffset - 5;
}
-(CGFloat)bottomOffset
{
return -(_bottomConstraint.constant + 5);
}
@end
************************************ 我的代码不起作用强> ******************
AppDelegate.h
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
AppDelegate.m
#import "AppDelegate.h"
#import "ViewController.h"
#import "DetectionViewModel.h"
#import "RscMgr.h"
@interface AppDelegate ()
@end
@implementation AppDelegate{
@private
RscMgr* _serialManager;
ViewController* _viewController;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
_serialManager = [[RscMgr alloc] init];
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UINavigationController* navController = (UINavigationController*) [mainStoryboard instantiateViewControllerWithIdentifier:@"navController"];
DetectionViewModel* detectionViewModel = [[DetectionViewModel alloc] initWithSerialManager: _serialManager];
_viewController = [[ViewController alloc] initWithViewModel: detectionViewModel];
UINavigationController* navigationController = [[UINavigationController alloc]initWithRootViewController:_viewController];
navController = navigationController;
return YES;
}
@end
ViewController.h
#import <UIKit/UIKit.h>
#import <opencv2/videoio/cap_ios.h>
#import <opencv2/imgcodecs/ios.h>
using namespace cv;
@class DetectionViewModel;
@interface ViewController : UIViewController<CvVideoCameraDelegate>{
IBOutlet UIImageView* imageView;
__weak IBOutlet UITextField *inputTextField;
}
-(instancetype)initWithViewModel:(DetectionViewModel*)viewModel;
@end
ViewController.m
#import "ViewController.h"
#import "DetectionViewModel.h"
#import "opencv2/videoio/cap_ios.h"
#import "opencv2/imgcodecs/ios.h"
#import "RscMgr.h"
@interface ViewController ()<UITextFieldDelegate>
@end
@implementation ViewController
{
@private
DetectionViewModel* _viewModel;
}
-(instancetype)initWithViewModel:(DetectionViewModel *)viewModel{
self = [super init];
if(self){
NSLog(@"init--DetectionViewModel");
_viewModel = viewModel;
}
return self;
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self->inputTextField.delegate=self;
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self->inputTextField.delegate = nil;
}
- (void)viewDidLoad {
[super viewDidLoad];
self->inputTextField.delegate=self;
[_viewModel open];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - UITextFieldDelegate
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[_viewModel sendMessage:@"jsd@jh@@hj@jhg@jh@@jh@jh@w2Open@w2Open@"];
inputTextField.text=nil;
return NO;
}
@end
DetectionViewMode.h
#import <Foundation/Foundation.h>
@class RscMgr;
@interface DetectionViewModel : NSObject
@property (readonly) BOOL connected;
@property (nonatomic, strong, readonly) NSString* receivedText;
-(instancetype)initWithSerialManager:(RscMgr*)serialManager;
-(void) sendMessage:(NSString*)message;
@end
DetectionViewModel.m
#import "DetectionViewModel.h"
#import "RscMgr.h"
@interface DetectionViewModel()<RscMgrDelegate>
@end
@implementation DetectionViewModel
{
@private
RscMgr* _serialManager;
UInt8 buf[14];
}
-(instancetype)initWithSerialManager:(RscMgr* )serialManager{
self = [super init];
if(self){
_serialManager = serialManager;
[_serialManager setDelegate:self];
_receivedText = @"";
}
return self;
}
-(void)sendMessage:(NSString *)message{
NSLog(@"in sendMessage() now");
NSLog(@"baud in sendMessage is:%i",[self getBaud]);
NSLog(@"txMode in sendMessage is: %i",[self getTxMode]);
if(_connected){
[_serialManager writeString:message];
}
}
-(void)setConnected:(BOOL)connected{
[self willChangeValueForKey:@"connected"];
_connected = connected;
[self didChangeValueForKey:@"connected"];
}
-(void)setReceivedText:(NSString *)receivedText{
[self willChangeValueForKey:@"receivedText"];
_receivedText = receivedText;
[self didChangeValueForKey:@"receivedText"];
}
#pragma mark - Delegate
-(void)readBytesAvailable:(UInt32)length{
NSString* messageReceived = [_serialManager getStringFromBytesAvailable];
[self setReceivedText:[_receivedText stringByAppendingFormat:@"%@",messageReceived]];
}
-(void)cableConnected:(NSString *)protocol{
[self setConnected:YES];
[_serialManager setBaud:9600];
[_serialManager open];
}
-(void)cableDisconnected{
[self setConnected:NO];
}
-(void)portStatusChanged{
}
@end
不同之处在于示例使用代码做界面,而我使用情节提要。我的代码也可以编译和运行,但不要将数据发送到串口。 我会尽快发布更多需要的信息。
【问题讨论】:
标签: ios objective-c iphone model-view-controller