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
一致

 

 

 

最终是 

posted @ 2018-08-16 14:22  雨筱逸悠  阅读(139)  评论(0编辑  收藏  举报