objective-C在XCode入门Cocoa框架

因为最近项目需要,必须得学习Mac开发。对于一个之前只在 windows中开发的程序员,这个转型有点大。

在XCode下编程主流的有Swift和Objective-C两种语言。相比之下笔者更喜欢swift。但是有一些老的项目还是用OC编写的,以及一些开源项目也是用OC编写的。而我要上手的项目就是一个开源项目,是用objective-c写的。因此即使喜欢swift,也必须得学objective-C。经过几天的研究,总算对xcode开发工具,objective-c编程语言,cocoa框架有了些认识。

本文即是自己的学习笔记,也是给新手入门MacOS下的编程(不是做手机app哦)。

本文主要给有编程基础的人群看。

我的开发环境如下:

操作系统:MacOS 10.13

开发工具:XCode 9.4.1

代码语言:Objective-C

目标:创建一个简单的登录窗口程序

准备工作:一台Mac电脑,安装好最新的XCode(我装的是9.4.1)

壹、新建一个项目

一、打开XCode,如图:

选择Create a new Xcode project,进入下个选项窗口

按照如图顺序点击,然后进入产品信息窗口

按照如图输入数据,最后点next

进入项目保存窗口,选择项目保存路径

点create后,一个项目就创建成功了。

如图:

至此,一个Xcode项目就创建成功了。

贰、文件的简单介绍

在导航栏中可以看到默认创建了这些文件

其中的*.m文件,就相当于C语言中的*.c文件

点击main.m文件,只有简单的代码

#import <Cocoa/Cocoa.h>

int main(int argc, const char * argv[]) {
    return NSApplicationMain(argc, argv);
}

#import就相当于#include

NSApplicationMain()函数主管事件循环,详情可见:[Cocoa] NSApplication 简介

AppDelegate类是代理类,新建的proj都会有这个文件,详情可见: 谈谈AppDelegate

ViewController类:cocoa中大量使用了mvc模式,这也是等下我们要编辑的类

叁、界面设计

点击main.storyboards

出现如图:在右下角搜索label,选中label控件拖动到view controller中,并修改label属性

选中用户名标签后,还可以修改很多其他的属性,读者可自行探索,这里不做详细介绍。

用相同的方法,在控件面板中搜索text ,可以找到text field和 secure text field,这两个控件,分别拖动到view control 面板中作为用户名和密码输入框。

搜索button,找到Push Button控件到面板中,并设置Title属性为“登录”作为登录按钮。

最后效果如图:

最后点xcode窗口左上角的运行按钮

就可以看到窗口效果了:

肆、往View Controller中添加属性,并响应按钮

一、往ViewController类添加NSTextField属性

我们虽然在界面上添加了Text编辑框,但是对于View controller而言,并不知道这两个编辑框的存在。我们要做的就是要连接界面上的编辑框与View Controller类

1、点中main.storyboards,再点击标题栏中的,在新出现的窗口中选中ViewController.h文件

2、连接NSTextField

按住ctrl并选中用户名编辑框(也可以用鼠标右键选中用户名编辑框后拖动),然后拖动鼠标会出现一根蓝色线段,将蓝色线段连接到ViewController.h中的@interface ViewController 和@end之间,会出现insert outlet or action标签,释放鼠标,会弹出连接窗口,如图:

在Name中填写上属性名,再点connect,则在ViewController.h就会自动添加相关属性。同样的操作,也给密码框添加属性。最后viewController.h变成如此:

#import <Cocoa/Cocoa.h>

@interface ViewController : NSViewController
@property (weak) IBOutlet NSTextField *edtUser;
@property (weak) IBOutlet NSSecureTextField *edtPwd;


@end

3、连接登录按钮

选中登录按钮,连接到ViewController.m。注意是*.m文件,不是*.h文件。

将该连接命名为loginBtnClked

然后会在ViewController.m中会出现新的方法:

4、编写代码

在loginBtnClked中添加如下代码:

- (IBAction)loginBtnClked:(id)sender {
    NSString * pstrUser = _edtUser.stringValue;
    NSString * pstrPwd = _edtPwd.stringValue;
    if([pstrUser isEqualToString:@"123"]){
        if([pstrPwd isEqualToString:@"000"]){
            NSLog(@"登录成功");
        }
        else{
            NSLog(@"密码错误");
        }
    }
    else{
        NSLog(@"用户名错误");
    }
    
}

之前创建的用户名编辑框,我们命名为edtUser,但是在使用中,我们要用_edtUser来替代,,这可以看作是edtUser的别名。

NSLog用于记录日志,在调试时,我们可以在all Output窗口中看到相关的文字。

5、设置断点并调试

断点的设置也很简单,只要在代码行号上点击一下,就标记了一个断点。

再点击这个继点,标签颜色变成淡蓝色,就可以将这个断点失效。如果要彻底删除这个断点,右键该断点,选择 delete breakpoint即可。

运行程序,点击登录按钮,程序就会在该断点暂停。

左下的红框是变量窗口,右下角的红框是程序输出窗口。

蓝框中的四个按钮分别是全速运行,单行执行,进入,跳出按钮。具体功能,请读者自行探索。

伍、后记

xcode下的objective-c的cocoa开发跟 windows下的开发还是有很多不同的。

比如界面上的控件与ViewController类的绑定。熟悉mfc 的读者应该知道,界面与代码之前的联系是通过ide添加一系列宏来绑定的,而这些宏可以在*.c,*.h文件中看到,但xcode则没有。

比如edtPwd的初始化并没有在代码中体现,edtPwd的实例化应该是在ViewController的构造函数中完成了,而这部分我们看不到。一开始学习的时候,就觉得很奇怪,edtPwd是在哪里实例化的?在此花费了很多时间。最后发现xcode只需要将编辑框与viewController绑定,xcode就会帮我们实例化。这样做的好处是减轻了程序员的负担。不好的地方是隐藏了细节。

陆、项目资源

可在下面连接中下载本文的代码。

https://download.csdn.net/download/sspdfn/10595765

猜你喜欢

转载自blog.csdn.net/sspdfn/article/details/81558847