1、问题
虽然在Mac上一般都是用Xcode来开发rich window-based应用。但有时候不利用Xcode项目模板插入到你的代码中的帮助会更容易看到发生了什么。
2、解决方案
Mac apps需要一些关键的组件才能工作。也就是,你需要使用NSApplication和NSWindow类来管理的应用自身以及初始的用户界面。你还需要一个app委托类,是在一个独立的文件中编写的。该app委托扮演着应用的一个帮助者,就是说要在其中编写一些关键的方法,应用工作需要用到这些方法。
3、原理
(1)App委托:
Mac应用使用了一个设计模式:委托。当你想要实现委托时,你就指派一个对象(叫委托)为另一个对象来行使权利。
app委托是一个类,需要它自己的头和实现文件。Mac app委托必须导入Cocoa框架并实现NSApplicationDelegate协议。协议就是一组属性和方法,一个类要担任委托就必须实现这些属性和方法。
定义一个app委托:
@interface AppDelegate : NSObject <NSApplicationDelegate>
app委托应当要有一个NSWindow属性并实现委托方法:(void)applicationDidFinishLaunching:(NSNotification *)aNotification;
NSWindow属性就是UI元素,你就是在它上面放用户内容的。委托方法就是一个通知,它是在你的应用完成启动时执行的。
(2)Application
Mac应用自身和前面一样,是从main函数中建立和启动的。首先需要得到NSApplication的一个实例。NSApplication是一个Cocoa类,它用了单例模式。意味着一个应用只有一个NSApplication实例。你必须用一个特别的过程来得到该对象的一个引用。
NSApplication *macApp = [NSApplication sharedApplication];
sharedApplication是一个class方法,它要么是实例化并返回一个新实例或者是返回之前就创建好过的一个实例。
一旦有了Mac application的一个应用,就能够创建一个app委托并将它设置为macApp的委托。
AppDelegate *appDelegate = [[AppDelegate alloc] init];
macApp.delegate = appDelegate;
然后,你的application必须要有一个window,所以用NSWindow类实例化一个window,将app委托的NSWindow设置为该window。
int style = NSClosableWindowMask | NSResizableWindowMask |
NSTexturedBackgroundWindowMask | NSTitledWindowMask | NSMiniaturizableWindowMask;
NSWindow *appWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(50, 50, 600, 400)
styleMask:style
backing:NSBackingStoreBuffered
defer:NO];
appDelegate.window = appWindow;
好了,运行就行了
[appWindow makeKeyAndOrderFront:appWindow];
[macApp run];
4、代码
Listing 1-16. AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) NSWindow *window;
@end
---------------------------------------------------------------------------------
Listing 1-17. AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
NSLog(@"Mac app finished launching");
}
@end
------------------------------------------------------------------------------------
Listing 1-18. main.m
#import "AppDelegate.h"
int main (int argc, char *argv[]){
NSApplication *macApp = [NSApplication sharedApplication];
AppDelegate *appDelegate = [[AppDelegate alloc] init];
macApp.delegate = appDelegate;
int style = NSClosableWindowMask | NSResizableWindowMask |
NSTexturedBackgroundWindowMask | NSTitledWindowMask |
NSMiniaturizableWindowMask;
NSWindow *appWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(50, 50, 600, 400)
styleMask:style
backing:NSBackingStoreBuffered
defer:NO];
appDelegate.window = appWindow;
[appWindow makeKeyAndOrderFront:appWindow];
[macApp run];
}
5、调用——注意要链接到Cocoa
clang -fobjc -framework Cocoa AppDelegate.m main.m -o macwindowapp
相关推荐
1.9 Signals 18 1.10 Time Values 20 1.11 System Calls and Librar y Functions 21 1.12 Summary 23 Chapter 2. UNIX Standardization and Implementations 25 2.1 Introduction 25 ix www.it-ebooks.info x ...
Port-Specific Changes: Mac OS X Port-Specific Changes: IRIX Porting to Python 2.6 Acknowledgements What’s New in Python 2.5 PEP 308: Conditional Expressions PEP 309: Partial Function Application...
codemirror版本:https://codemirror.net/5/doc/releases.html
外国电影演员识别系统源码分享
mf3010 打印扫描一体机驱动管理软件。
2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC
chrome-headless-shell-linux64-135.0.7004.0 (Canary).zip
DeepSeek大模型介绍与展望.pptx
英特尔的公版原理图和PCB,cadence版本
《单容水箱液位精准调控:模糊控制策略的深度研究与复现》,单容水箱液位随动系统的模糊控制研究 模糊控制lunwen复现 期刊:化工与自动化仪表(2021年) 图1为结构图,图9为原文结构图, 版本不一样,器件略有调整 图7为结果图,图8为原文结果图 ,单容水箱液位;模糊控制;研究;论文复现;期刊;化工与自动化仪表;结构图;结果图;版本差异;器件调整,"模糊控制研究在单容水箱液位随动系统中的应用与复现"
一个windows上使用的搜索小工具
内容: 这份数据集包含了来自国际大洋发现计划(IODP)第342航次站点U1405、U1406、U1407、U1409和U1410的浮游有孔虫碳酸盐团簇同位素、稳定氧和碳同位素,以及沉积物中的GDGT(甘油二烷基甘油四醚)和烯酮数据。这些站点位于北大西洋的新foundland脊(U1407、U1409和U1410)和J-异常脊(U1405和U1406),用于创建覆盖整个新生代的几乎连续但低分辨率(约每92万年一个样本)的数据拼接,并重建了碳酸盐团簇同位素、TEX86和UK'37海表温度。每个样本包含20立方厘米的沉积物,覆盖2厘米的核心深度区间。年龄模型主要基于详细的船上生物-磁性地层学研究(Norris等,2014)。然而,在40.8 Ma至44.8 Ma时间段内,使用了Cappelli等人(2019)更新的U1410站点年龄模型,通过与U1408站点的年龄模型对比来确定。 访问此数据集,请点击这里:"" ()。
厨房用品分割系统源码&数据集分享
.
监控鞋类物品检测系统源码分享
2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC
曲线图异常波形检测系统源码分享
内容概要:本文介绍了动车组车号自动识别的现状及其存在的问题,提出了基于图像识别技术的新方法。文中详述了传统人工识别与RFID识别方法的不足,重点阐述了一种新的图像识别系统的设计与实施方案,该系统能够实现在多种恶劣环境下高效精确地获取动车组车号,并通过实际案例展示了这套系统的优势以及其在铁路行业的广阔应用前景。 适用人群:从事铁路运输管理、轨道交通系统开发维护的技术人员,尤其是负责动车组调度、监控及维修工作的相关人员。 使用场景及目标:①用于替代现有人工记录与RFID标签方式,提升动车组车号识别精度与效率;②适用于各种天气状况下的户外作业场景;③旨在构建更加智能化、信息化程度更高的铁路运输体系,助力智慧动车段建设。 其他说明:文中还包括具体的实验对比和技术细节分析,如不同的开机触发装置选择、图像采集设备参数设置、补光措施及识别算法的设计,强调了实际应用场景中可能遇到的问题以及相应的解决方案。
基于AnythingLLM框架和Ollama环境本地运行deepseek,并可以通过用户自己的文档来针对性地回答用户问题,用户也可以上传文件来构建模型回复问题所需要的所有参考资料的知识库,使得模型相对于在线模型更加专业地解答用户的问题。同时本地部署保证了隐私性和针对性。
指针式表盘指针关键部位分割系统源码&数据集分享