急需纠正自己的错误认识,Mac开发和iOS开发UI显示、事件交互、生命周期等存在极大的差距

首先点击事件NSButton和UIButton完全是两个不同的东西

列表UITableView和NSTableView也是神似而已

最终点击事件选择的是继承NSView重写了MouseDown方法

@interface MouseDownActionButton : NSView

@property(nonatomic,copy)void (^responseForMouseDown)(void);

@end

@implementation MouseDownActionButton

-(void)mouseDown:(NSEvent *)event
{
if(self.responseForMouseDown)
{
self.responseForMouseDown();
}
} @end

读取文件分成两种情况,一种是开启了App沙盒(一般只能访问沙盒目录下文件),一种是没有开启App沙盒(可直接访问大部分文件)

沙盒模式下选取文件操作

-(void)letUserMakeFileChoose
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setPrompt: @"打开"];
openPanel.allowsMultipleSelection = YES;
openPanel.allowedFileTypes = @[@"mp4"];
openPanel.directoryURL = [NSURL fileURLWithPath:@"/Users/admin/Documents/xxxxx"];
_videoItemArray = [NSMutableArray array];
typeof(self) __weak weakself = self;
[openPanel beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse returnCode) { if (returnCode == ) {
typeof(weakself) __strong strongself = weakself;
[strongself.videoItemArray addObjectsFromArray:[openPanel URLs]];
if (strongself.videoItemArray.count > ) {
[strongself.view setNeedsLayout:YES];
}
}
}];
}

沙盒模式下,这里的文件在APP生命周期内拥有访问权限,重新启动APP将会失去访问权限,当然关闭沙盒之后就没有这个影响了

播放操作时,需要执行 [self.view setNeedsLayout:YES] 也就是重新布局播放层所在视图否则在下一次布局前无法显示出播放视图

#import "AppCommonSetting.h"

int main(int argc, const char * argv[]) {
if (argc > ) {
if (argv[][] == '') {
[AppCommonSetting shareSetting].shouldReChoose = YES;
}
}
return NSApplicationMain(argc, argv);
}

Main函数和iOS的差别也很大,在这里没有显式传入Delegate,在这里是创建了一个单例来存储命令行调用时的参数

这里命令行调用时不是执行的.app而是app包里面MacOS文件夹下的可执行命令行文件

 

最终是

cocoa开发Mac小试笔记的更多相关文章

  1. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...

  2. 马上着手开发Mac应用程序

    你是否想要开发 Mac 应用程序却又不知道从哪里入手?本路线图提供了 Mac 应用程序开发的绝佳起点,即使你已经是一个 iOS 开发专家,本路线图对你依然适用.Apple让开发应用程序和提交应用程序到 ...

  3. 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

    http://www.bubuko.com/infodetail-382485.html 标签:des   class   style   代码   html   使用   问题   文件   数据 ...

  4. 第一章 Andorid系统移植与驱动开发概述 - 读书笔记

    Android驱动月考1 第一章 Andorid系统移植与驱动开发概述 - 读书笔记 1.Android系统的架构: (1)Linux内核,Android是基于Linux内核的操作系统,并且开源,所以 ...

  5. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

  6. Android开发艺术探索笔记—— View(一)

    Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...

  7. UWP开发入门系列笔记之(一):UWP初览

    标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...

  8. 《PHP与MySQL WEB开发》读书笔记

    <PHP与MySQL WEB开发>读书笔记 作者:[美]Luke Welling PHP输出的HereDoc语法: echo <<<theEnd line 1 line ...

  9. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

随机推荐

  1. 深入分析java线程池的实现原理(转载)

    前言 线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配.调优和监控,有以下好处: 1.降低资源消耗: 2.提高响应速度: 3.提高线程的 ...

  2. 设置log rotation避免tomcat catalina.out文件增长过大

    创建logrotate配置文件 $ vi /etc/logrotate.d/tomcat 添加以下内容: /opt/tomcat/logs/catalina.out { copytruncate da ...

  3. Java对象的内存实际占用

    一.打包和使用方法参考我之前的这篇文章,本文主要是更新了测量的类及方法,实际测试这个方法更准确. https://www.cnblogs.com/yoyotl/p/8421287.html 二.新的测 ...

  4. Ubuntu 13.10 安装Terminalx 后更改默认终端设置

    1.安装 terminalx, sudo apt-get install terminator 2.Ctrl+ Alt + t 试一下打开什么终端,我的默认启动的是Terminator;如果想换换默认 ...

  5. react-无状态组件

    import React, { Component } from "react"; //import PostItem from "./PostItem"; / ...

  6. 关于NSString的@""和nil时的判断方法

    1.NSString *str = @"";该语句代表是一个空串,并且不为nil,占有内存空间 2.NSString *str = nil;该语句代表,str不指向任何对象,指针指 ...

  7. 大津法---OTSU算法

    简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...

  8. Spring MVC学习摘要

    1. context:component-scan标签的use-default-filters属性的作用以及原理分析 http://www.cnblogs.com/hafiz/p/5875770.ht ...

  9. Socket阻塞模式和非阻塞模式的区别

    简单点说: 阻塞就是干不完不准回来,    非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系 ...

  10. android平台的三个编译命令——make,mm,mmm

    在Android源码根目录下,执行以下三步即可编译android: 1.  build/envsetup.sh  #这个脚本用来设置android的编译环境; 2.  lunch  #选择编译目标 3 ...