• cocoa开发Mac小试笔记


    急需纠正自己的错误认识,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 == 1) {
                typeof(weakself) __strong strongself = weakself;
                [strongself.videoItemArray addObjectsFromArray:[openPanel URLs]];
                if (strongself.videoItemArray.count > 0) {
                    [strongself.view setNeedsLayout:YES];
                }
            }
        }];
    }

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

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

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

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

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

    NSTask *certTask = [[NSTask alloc] init];
    [certTask setLaunchPath:@"/usr/bin/security"];
    [certTask setArguments:[NSArray arrayWithObjects:@"find-identity", @"-v", @"-p", @"codesigning", nil]];
    NSPipe *pipe = [NSPipe pipe];
    [certTask setStandardOutput:pipe];
    [certTask setStandardError:pipe];
    NSFileHandle *handle = [pipe fileHandleForReading];
    [certTask launch];
    //在这之后进行获取
    NSData *data;
    data = [handle readDataToEndOfFile];
    NSLog(@"test %@",[[NSString alloc] initWithData:data encoding:kCFStringEncodingUTF8]);

    摘自:https://blog.csdn.net/shengpeng3344/article/details/103455886

    这样就可以打印出证书信息,和终端中输入/usr/bin/security find-identity -v -p codesigning
    一致

     

    最终是 

  • 相关阅读:
    四则运算
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    实验二 K-近邻算法及应用
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验一 软件开发文档与工具的安装与使用
    ATM管理系统
    流程图与活动图的区别与联系
    四则运算自动生成程序
  • 原文地址:https://www.cnblogs.com/yuxiaoyiyou/p/9487016.html
Copyright © 2020-2023  润新知