Mac应用开发
文章平均质量分 82
Jarlen John
记录学习过程,见证技术成长! Stay hungry,Stay foolish!
展开
-
Objectiv-C设计模式笔记
原型模式:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。在iOS中原型模式本质是使用了对象的复制机制。遵守NSCopying协议,实现copywithzone方法实现对象的深复制。也称为虚构造器(virtual constructor)定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。原创 2023-12-26 22:32:39 · 1108 阅读 · 0 评论 -
'NSUnknownKeyException', reason: … this class is not key value coding-compliant for the key X 之追根溯源
问题在开发过程中,连接UILabel到xib中时出现以下错误:* Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: this class is not key val...原创 2019-02-20 18:50:38 · 719 阅读 · 0 评论 -
socket closed by remote peer GCDAsyncsocket
在项目中用到GCDAsyncsocket,Mac端作为服务器,手机端作为客户端,在通信过程中,不定时出现以下错误:error domain=gcdasyncsocketerrordomain code=7 socket closed by remote peer排错此错误一般由于服务端关闭而导致出错,出现此问题的一般排查步骤:服务端要将新连接的socket强引用,否则会出现此错误。...原创 2020-04-21 18:21:46 · 6423 阅读 · 0 评论 -
Mac通过aapt获取apk文件的基本信息
通过appt获取apk文件的基本信息1.主要过程1.1 解析AndroidManifest.xml文件,获取E: application节点下的android:icon信息./aapt dump xmltree /Users/mac123/Desktop/携程旅行.apk --file AndroidManifest.xml部分输出结果如下:E: application (line=1...原创 2019-12-26 12:27:46 · 854 阅读 · 0 评论 -
MacOS应用开发学习笔记
系统学习MacOS应用开发,但是细小的知识点容易忘记,因此在此做下笔记,说不定后续有时间回顾下!第1章 准备工作Apple现在要求上架Mac AppStore的应用必须开启沙盒SandBox,该项在项目配置中打开。如果你的应用要上架Mac AppStore且需要访问服务器的API接口,必须打开SandBox中Network下的Outgoing Connections选项, 同时Hardwa...原创 2019-10-12 23:47:46 · 1491 阅读 · 0 评论 -
老生常谈:frame和Bounds的区别
UIView及NSView等控件常有的frame和bounds有何不同呢?UIView的bounds是一个矩形,它表示在自身坐标系中的位置(x、y)和大小(width、height)。UIView的frame也是一个矩形,它表示该视图在父视图坐标系中的位置(x、y)和大小(width、height)。因此,假设现在有view大小为100x100,在父视图的位置为(25,25),如下代码打印出...转载 2019-03-06 19:04:28 · 2466 阅读 · 0 评论 -
NS前缀表达的意思
在Cocoa或者Cocoa Touch中很多类都是以NS为前缀,为什么?有什么含义?它是继承自 NeXTSTEP ,Cocoa框架的源代码很多来自NexSTEP库的Foundation和AppKit中(那些名字仍在Apple的Cocoa框架中使用),NextStep公司的工程师选择的NS作为他们的类前缀,因此使用到了现在。因为Objective-C是C语言的扩展,它不想C++那样有命名空间,为...原创 2019-03-05 10:05:54 · 830 阅读 · 0 评论 -
@class 与#import的关系
问题根据我的理解,在ClassA需要包含ClassB的头文件同时ClassB需要包含ClassA的头文件的情况下,为了避免任何循环引用,应该使用forward-class声明。#import本质就是一个简单的#ifndef,因此引用头文件只会出现一次。问题是:我们何时该使用#import何时使用@class,有时在使用@class的情况下,会出现编译器警告,信息如下:warning: re...原创 2019-02-25 19:03:47 · 279 阅读 · 0 评论 -
@synthesize和@dynamic的关系?
@dynamic和@synthesize@property中使用@dynamic和@synthesize有何不同呢?@synthesize将为属性自动生成getter和setter方法。@dynamic仅告诉编译器该属性的getter和setter方法不在类本身,而在其他地方(如父类或者在运行时中提供)。如果你没有手动实现 setter 方法和 getter 方法,那么编译器会自动为你加上...转载 2019-03-01 10:20:43 · 517 阅读 · 0 评论 -
如何检查iOS或macOS网络连接是否可用?
开发过程中,需要监听网络的连接状态,那么如何去监听呢?Swift版本通过CocoaPods或者Carthage安装Reachability,地址:https://github.com/ashleymills/Reachability.swift通过闭包测试reachabilitylet reachability = Reachability()!reachability.whe...原创 2019-02-19 10:54:09 · 1554 阅读 · 0 评论 -
Cocoa Autolayout:content hugging 和 content compression resistance priority的区别
总思路概念简介:Hugging => 内容不想增加。Content Hugging Priority即内容压缩优先级。Compression Resistance => 内容不想缩小。Content Compression Resistance Priority 称为内容抗压缩优先级举例如下:假设你已经得到一个按钮如下:[ Click Me ]...原创 2019-02-28 10:24:53 · 261 阅读 · 0 评论 -
Objective-C如何创建delegate
快速创建一个代理MyClass.h文件内容如下:#import <BlaClass/BlaClass.h>@class MyClass; //define class, so protocol can see MyClass@protocol MyClassDelegate <NSObject> //define delegate pr...原创 2019-02-23 10:26:11 · 525 阅读 · 0 评论 -
Objective-C中的常量
在Cocoa开发过程中,偏好设置中的键名使用 constant NSString保存。我认为这是一个很好的idea,因为在必要的时候该方式允许我们方便改变常量值,而且,符合将数据和逻辑分离的理念。疑惑有没有一种好方法可以让这些常量在整个应用程序中定义一次?我确信有一种简单而聪明的方法,但是现在我的类只是重新定义它们使用的类。好的建议创建Constants类创建一个Constants类,然...原创 2019-02-21 22:43:55 · 527 阅读 · 0 评论 -
如何本地化(iOS/watchOS/macOS) Bundle显示名称
本地化应用名称非常简单,让我们开始吧。设置本地化首先,确保你已经设置了本地化需要的其他语言(注意,并不需要完全本地化整个应用,只是显示名称)。选中项目的project navigator,找到Localizations,然后选择一个需要本地化显示的语言,如图所示:创建Strings文件接着,你必须创建一个Strings文件,该文件包含你需要本地化的包名称。找到File-> New-...转载 2019-01-30 11:48:03 · 1516 阅读 · 0 评论 -
NSTextField显示超链接(点击并跳转)
在实际使用过程中,NSTextField需要能够显示超链接,用户点击之后可以跳转自动打开浏览器并显示相应的网页。基于此需求,实现过程如下:Step1 服务器支持如果数据是从服务器获取,则文字部分一般为HTML格式并需要使用base64编码之后提供给客户端。Step2 属性设置先提供方法如下:-(NSAttributedString *)stringFromHTML:(NSString ...原创 2019-01-27 15:44:09 · 1367 阅读 · 0 评论 -
遍历NSArray的高效方法
问题:OSX10.4以上遍历NSArray的标准用法是什么?OSX10.5+/iOS6以上系统在OSX10.5+/iOS6以上系统中,通常最好的方式是如下:for (id object in array) { } 上述结构常用来遍历一个遵守NSFastEnumeration协议的集合中的对象。这种方法具有速度优势,因为它将指向多个对象的指针(通过一个方法调用获得)存储在一个...转载 2019-03-14 22:05:02 · 433 阅读 · 0 评论 -
Objective-c/Cocoa如何抛出异常
Objective-c/Cocoa抛出异常(Exception)的最好方式是什么?回复:抛出异常的方式平常使用[NSException raise:format:],示例如下:[NSException raise:@"Invalid foo value" format:@"foo of %d is invalid", foo];或者:@throw([NSException excep...转载 2019-03-15 10:03:32 · 376 阅读 · 0 评论 -
OC语言如何打印方法名和行号,并有条件地禁用NSLog?
需求:是否能够实现NSLog打印当前调用的方法名和行号?能否根据当前开发环境还是发布环境禁用NSLog的输出?实现:采用宏定义实现,其中:DLog仅在DEBUG模式下输出内容,Release模式不输出任何内容ALog无论在何种模式均输出,例如ALog(@"Hello word");输出结果如下:-[LibraryController awakeFromNib] [Line 364...原创 2019-03-12 10:14:29 · 673 阅读 · 0 评论 -
MacOS开发——常见错误解决
报错:command/usr/bin/codesign failed with exit code 1- code sign error解决办法如下:打开终端,依次输入如下两个命令:cd ~/Library/Developer/Xcode/DerivedDataxattr -rc ....原创 2019-08-23 13:59:12 · 1549 阅读 · 0 评论 -
MacOS开发-用命令行压缩文件
MacOS开发-用命令行压缩文件在Mac OS X中,你可以通过右键上下文菜单中的”压缩xxx“选项制作压缩文件,但是,该方式创建的压缩文件和通过命令行zip创建的压缩文件不同。这种区别至少影响了Apple提供的一项服务操作,那就是无法接受通过zip命令创建归档文件zip -jr AppName.zip AppName.app如果手动创建,就会影响自动化发布流程。那么,如何通过终端创建一...原创 2019-08-14 12:19:52 · 2095 阅读 · 0 评论 -
Cocoa开发—XCode11 Beta提示"String" file not found之错误解决
在升级Xcode到XCode10/11 beta之后,项目报错 “‘String’ file not found”#include <String> //file not found上述代码会报错“ ‘String’ file not found”,查阅相关资料,最终通过如下方法解决:1.在Targets -> “Build Phases” -> “Link ...原创 2019-07-26 16:50:11 · 6545 阅读 · 3 评论 -
Cocoa开发—Macos偏好设置需要的URL Scheme
使用方法:[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_Automation"]];下面列出了一个系统偏好设置支持的链接列表,用于显示OS X系统首选项应用程序中的特定窗口和项目。注意,并...原创 2019-07-26 13:42:31 · 1481 阅读 · 1 评论 -
Cocoa开发—MacOS10.14以上系统跳转到系统偏好设置中的安全-隐私-自动化
通过使用URL scheme中的 x-apple.systempreferences ,可以准确定位到系统偏好设置中的“Security & Privacy > Privacy > Automation”页面,URL scheme如下:x-apple.systempreferences:com.apple.preference.security?Privacy_Automat...原创 2019-07-26 12:32:34 · 1768 阅读 · 0 评论 -
MacOS开发-获取正在运行的所有进程名及pid
参考资料Retrieve names of running processesGet name from PID?获取进程方法总结方法一: 用applescript获取tell application "System Events" set listOfProcesses to every process set allProcess to {} repeat with pro...原创 2019-07-15 17:11:04 · 8410 阅读 · 0 评论 -
通过IOKit监听Mac电脑上的USB驱动事件
Mac电脑如何监听USB设备连接和断开呢?首先需要区分是监听USB设备还是disk(U盘、SD卡等),如果为后者,则可以直接通过系统通知,而不需要调用IOKit监听,方法如下:一、监听可装载的USB设备(U盘、SD卡等)1.注册通知// Notification for Mountingthe USB device[[[NSWorkspace sharedWorkspace] noti...原创 2019-04-30 10:21:51 · 4093 阅读 · 1 评论 -
编写高质量iOS与OS X代码的52个有效方法学习总结
1.掌握C语言的内存模型与指针2.在类的头文件中尽量少引入其他头文件可以降低类耦合,减少编译时间,增加代码优雅度。使用@class前向声明,将引入位置尽量后移,只在却有需要时引入,主要有以下几种情况:如果你写的类继承自某个类个超类,则必须引入定义那个超类的头文件。声明写的类遵守某个协议,那么该协议必须有完整定义,且不能使用前向声明。3.多用字面量语法,少用与之等价的方法如:NSNu...原创 2019-04-12 08:37:30 · 265 阅读 · 0 评论 -
objectForKey:和valueForKey:区别
函数原型如下:- (ObjectType)objectForKey:(KeyType)aKey;- (ObjectType)valueForKey:(NSString *)*key*;objectForKey:是一个NSDictionary的方法。字典是类似NSArray的集合类,它不使用索引的方式检索元素,而是使用键获取和设置元素。字典中的键名必须不同。valueForKey:是KV...原创 2019-04-10 10:07:27 · 1534 阅读 · 0 评论 -
移除自定义NSMenu的上下空白间距
在自定义pop-up menu过程中,我想实现灰色背景上覆盖亮色文字,此过程中使用了NSMenuItem的setView:方法,成功实现。但是,NSMenu在菜单的顶部和底部以浅色绘制4像素高的条带,这在很大程度上破坏了外观,因为NSMenu没有公共API可以改变此情况,如何解决?方案通过为NSMenu添加分类的办法解决。头文件如下:@interface NSMenu (zzl_noPad...原创 2019-03-27 10:00:35 · 401 阅读 · 0 评论 -
通过NSLog打印结构体类型数据(如CGRect或CGPoint)
结论NSLog(@"%@", NSStringFromCGPoint(cgPoint));其他可用方法有:NSStringFromCGPoint NSStringFromCGSize NSStringFromCGRect NSStringFromCGAffineTransform NSStringFromUIEdgeInsets示例:NSLog(@"rect1: %...翻译 2019-03-19 10:01:07 · 1113 阅读 · 0 评论 -
Cocoa Programming - NSImageView
NSImageView显示来自NSImage对象数据的框架。概述ImageView可以是静态的或者可编辑的。静态image view只显示指定的图片,可编辑的image view可让用户改变显示的图片。你也可以配置image view为可复制、粘贴、删除或者是图片可拖拽。注意只有当用户拖拽图片进入image view的bounds时才会触发动作方法,并且只有image view可编辑...原创 2018-12-23 10:28:02 · 279 阅读 · 0 评论 -
Cocoa Programming-NSPopUpButton
本文主要介绍NSPopUpButton相关的功能及API。NSPopUpButtonA display of a single item from a list of items, and provide an interface for selecting items from the list.列表项中显示单个项目,并且提供从列表中选取项目的界面。初始化NSPopUpButt...原创 2018-12-23 00:04:58 · 642 阅读 · 0 评论 -
NSBox介绍
一个box是一个简单的视图,它可以在给自身绘制边框并命名。它在视觉上将其他视图(包括控件)组合在一起。设置Box的标题可以使用无标题或者标题在以下六个位置的box,要设置标题的位置,使用setTitlePosition:方法设置为以下选项中的任意一个,默认情况下,标题位置为NSAtTop。 NSAboveTop![E900CBAA-249E-4A5F-891...翻译 2018-08-17 11:57:23 · 1473 阅读 · 0 评论 -
Mac电脑常用快捷键,官方推荐
Mac电脑常用快捷键,官方推荐在Mac开发中键盘部分可做参考,在自定义键盘快捷方式时建议不要跟以下快捷键冲突。 主键标 键盘快捷键 是否是系统快捷键 动作描述 Space Command-Space 是 显示或隐藏Spotlight搜索字段(多语言环境下也多用于输入法切换) Shift-Command-Space 是 各不相同...原创 2018-08-16 10:53:36 · 829 阅读 · 0 评论 -
Cocoa动画编程指南
Cocoa提供了在有限或不确定的时间内对某些类型的操作进行动画化的工具。NSAnimation提供的基本动画,其主要目的是提供一个动画时机和管理的源。尽管Animation一词或许会让你想起卡通或其他电影,但是animation对象主要设计用于程序用户界面中的动画部分。比如,你可以使用NSViewAnimation类(NSAnimation的子类)对视图或窗口的大小、位置或者透明度创建平滑过渡。这...翻译 2018-08-14 15:13:25 · 1317 阅读 · 0 评论 -
Cocoa开发之从菜单中添加和移除子菜单
问题:Cocoa中如何从一个菜单中添加和移除一个子菜单?使用NSMenu方法insertItem:atIndex: 或removeItemAtIndex:去添加或者移除子菜单,也就是NSMenuItem。在Cocoa中一个子菜单也就是NSMenu的实例,它只是碰巧附加到高级菜单中的一个项目。换句话说,菜单是分层的,子菜单是“顶层”菜单之外的任何菜单。当你想要添加或者移除一个子菜单时,只需要...翻译 2018-08-10 12:09:24 · 700 阅读 · 0 评论 -
Objective-C中nil 、Nil、NULL、NSNull的区别
转载自nil、Nil、NULL、NSNull的区别nil:指向一个对象的空指针,对objective c id 对象赋空值.Nil:指向一个类的空指针,表示对类进行赋空值.NULL:指向其他类型(如:基本类型、C类型)的空指针, 用于对非对象指针赋空值.NSNull:在集合对象中,表示空值的对象.1.nil 表示指向一个对象的指针为空 定义如下:#ifndef nil# ...转载 2018-08-01 11:14:14 · 439 阅读 · 0 评论 -
用NSArrayController结合Cocoa绑定实现TableView中数据自动排序
用NSArrayController结合Cocoa绑定实现TableView中数据自动排序Cocoa的绑定机制是一个强大的工具,尤其对table填充和排序数据时特别有用。通过代码实现对table数据填充及排序时需要相当数量的代码量。Cocoa绑定可以减少大部分的代码,不能说零代码,但是至少节约了很多工作。这篇技术文档介绍如何通过Cocoa绑定实现对NSArrayController提供数据的t...翻译 2018-08-09 17:33:18 · 781 阅读 · 0 评论 -
Objective-C实现图片生成缩略图
/** 由图片生成缩略图 */static NSImage *ATThumbnailImageFromImage(NSImage *image) { NSSize imageSize = [image size]; CGFloat imageAspectRatio = imageSize.width / imageSize.height; NSSize thumbnai...原创 2018-07-31 20:14:14 · 555 阅读 · 0 评论 -
NSButton绘制虚线边框
首先自定义button,继承自NSButton,在自定义.m文件的drawRect:方法中写如下代码:- (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; //将按钮边框绘制成虚线 [self setWantsLayer:YES]; [self setBordered:NO]; ...原创 2018-07-27 18:58:08 · 664 阅读 · 0 评论 -
OC中属性和成员变量的区别&联系
成员变量和属性在Objective-C语法中,变量有两种写法,一种是以 @property 形式声明的属性,另一种是定义在大括号里 (@interface :NSObject{} )的成员变量( instance variable )。@interface MyObject : NSObject { NSInteger memberVar; // 成员变量}@proper...转载 2018-07-26 10:41:26 · 1703 阅读 · 0 评论