Tag: macos

什么是在Swift中的java接口或目标c协议的等价物?

我一直在寻找新的Swift语言,在互联网上浏览和searchApple提供的书籍之后,试图findSwift中的接口(在java中)或协议(在objective-c中)的等价物,我似乎还无法find它。 有没有人知道这个组件在swift中的名称是什么,它的语法是什么?

在iOS和OS X中获取系统范围通知的状态

我正在尝试写一个代码来处理iOS上的开/关屏幕(你可以看看类似的问题讨论这个问题)。 我为这个问题提供了OSX标签,因为OSX具有相同的系统范围通知function。 下面描述的问题是inheritance到通知设施(与iOS或OSX)。 有一个众所周知的方法来注册系统范围的通知com.apple.springboard.hasBlankedScreen在屏幕closures或打开时接收通知。 仅供参考(以下是用于注册系统范围通知的API): notify_post,notify_check_ notify_get_state和朋友 CFNotificationCenterPostNotification,CFNotificationCenterAddObserver和朋友 (内部使用notify_post等) 但是,这种方法存在两个相互关联的问题: 对于两个屏幕closures和通知的通知具有相同的名称(com.apple.springboard.hasBlankedScreen) 观察者没有收到状态作为通知的一部分。 因此,我们需要实现一些不同的屏幕打开和closures的解决scheme(因为相同的通知callback将被调用,并且没有参数将具有状态)。 一般来说,国家与通知callback脱钩的核心问题。 我看不出如何处理这个优雅。 我提出了两个简单的方法(每个都是有缺陷的)。 寻找另一种方法或改进这种方法的想法。 计数解决scheme 我们可以实施一个计数器来统计我们已经收到了多less通知,根据这些信息我们将知道是否通知打开或closures屏幕(基于我们的柜台的奇怪)。 但是,它有两个缺点: 1)在这种情况下,如果系统(由于devise时间的原因未知)将发送具有相同名称的附加通知,我们的逻辑将被拧紧,因为它会打破奇怪的检查。 2)另外,我们需要正确设置初始状态。 所以在代码中的某处我们会有这样的东西: counter = getInitialState(); registerForNotification(); 在这种情况下,我们有一个竞争条件。 如果系统会在getInitialState()之后发送通知并改变状态,但是在registerForNotification()之前,我们将以错误的计数器值结束。 如果我们会做以下代码: registerForNotification(); counter = getInitialState(); 在这种情况下,我们有另一种竞争条件。 如果系统发送通知并在我们做了registerForNotification()之后,但在getInitialState()之前改变状态,我们将得到一个计数器,将进入通知callback,并增加一个计数器(这会使其错误)。 确定通知收到解决scheme时的状态 在这种情况下,我们不存储任何计数器,而是在通知callback中使用API​​ notify_get_state来获取当前状态。 这有它自己的问题: 1)asynchronous传送到应用程序的通知。 所以,如果closures屏幕的速度非常快,您可以在屏幕已经打开的情况下收到两个通知。 所以,notify_check会得到一个当前的状态(相对于发送通知时的状态)。 因此,当应用程序将在通知callback中使用notify_get_state时,将确定有两个通知“屏幕已打开”,而不是一个通知“屏幕已closures”,另一个“屏幕已打开”。 PS一般来说,所有描述的问题都不是特定于屏幕开/关的情况。 它们对于具有独特状态并以相同的通知名称发送的任何系统范围的通知都是实际的。 更新1 我没有准确地testing开启/closures屏幕的情况,并且获得了notify_get_state()的相同结果。 然而,当我收到两个通知com.apple.springboard.lockstate (通过CFNotificationCenterAddObserver订阅)时,我有类似的情况,我使用另一个API来获取当前的设备locking状态,并收到两个通知相同的值。 所以这只是我的假设,notify_get_state也会返回相同的值。 不过,我认为这是受过教育的猜测。 notify_get_state的input参数对于两个调用是相同的(它不会改变)。 我不认为系统存储应该由notify_get_state返回的状态的FIFO队列。

如何find一种方法可能抛出并在Swift中捕获它们的错误

我正在使用NSFileManager.contentsOfDirectoryAtPath获取目录中的文件名数组。 我想使用新的do-try-catch语法来处理错误: do { let docsArray = try fileManager.contentsOfDirectoryAtPath(docsPath) } catch { // handle errors print(error) // this is the best I can currently do } 我docsPath一个错误可能是docsPath不存在,但我不知道如何捕捉这个错误。 而且我不知道可能发生的其他可能的错误。 文档示例 error handling文档有这样一个例子 enum VendingMachineError: ErrorType { case InvalidSelection case InsufficientFunds(centsNeeded: Int) case OutOfStock } 和 do { try vend(itemNamed: "Candy Bar") // Enjoy delicious snack } […]

将SceneKit场景渲染为video输出

作为主要的高级/ iOS开发人员,我对使用SceneKit进行animation项目感兴趣。 我已经在SceneKit上玩了好几个月了,尽pipe它明显是为了“实时”交互而devise的,但是我觉得能够将SKScene渲染成video是非常有用的。 目前,我一直使用Quicktime的屏幕录像机捕捉video输出,但是(当然)帧速率下降。 有没有一种方法可以让场景按照自己的速度渲染并作为stream畅的video文件输出? 我知道这是不太可能的……只是想我会问,如果我错过了一些较低级别的东西!

创build一个iOS / OS X跨平台类

我读了很多有关为这两个系统创build一个跨平台库的问题。 每个答案都指向静态库作为解决scheme。 我不想结束一个静态库,我想创build一个iOS的方法和他们的对应的OS X的类。 -(void)createColor:(NSColor*); -(void)createColor:(UIColor*); 我遇到的第一个问题是,我无法find一种方法来使用仅在特定系统中可用的类。 所以,例如,我怎么能pipe理一个在iOS中与UIColor和OS X中的NSColor一起使用的NSColor ? 如果我为iOS创build项目,当我查看Foundation.h我无法在标题列表中findNSColor.h 。 我想用TARGET_OS_MAC和TARGET_OS_IPHONE定义来区分这两个系统…我走对了吗? 编辑添加更多信息: 目前我有两个目标:iOSTestApp和OSxTestApp。 对于这些目标,我已经根据系统包含了所需的框架。 使用TARGET_OS_MAC和TARGET_OS_IPHONE仅在selectOSXTestApp作为活动目标时才起作用。 当我selectiOSAppTest时,Xcode返回OS X数据types的错误(即NSColor ) 这里是产生这些错误的代码的一个例子: #if TARGET_OS_MAC -(void)createColor:(NSColor*)color; #elif TARGET_OS_IPHONE -(void)createColor:(UIColor*)color; #endif 而如果我反转它的工作定义…这里产生这些错误的代码的一个例子: #if TARGET_OS_IPHONE -(void)createColor:(UIColor*)color; #elif TARGET_OS_MAC -(void)createColor:(NSColor*)color; #endif

每次我编译到设备时,Xcode询问用户名和密码

我使用pipe理员帐户进行开发。 但每次我编译到设备Xcode是要求pipe理员用户名和密码。 我GOOGLE了这个问题。 但没有任何解决scheme的工作。 我试图从这个post的解决方法,但它没有奏效 授权Xcode / Mac OS中的非pipe理员开发人员 我也尝试禁用和启用DevSecurityTools,但它没有工作。 我正在使用Mac OSX Lion 10.7.3上安装的Xcode 4.3.1。 有没有什么办法解决这一问题?

从terminal构build/运行iOS Xcode项目

我想从terminalbuild立一个Xcode项目,然后根据需要运行它,也从terminal。 我一直在寻找一种方法来做到这一点,但只能设法find一种适用于iPhone模拟器的方法,而不是它自己的实际设备。 这甚至有可能吗? 我想从terminal设备上的Xcode项目的原因是,应用程序运行一系列的自动化testing,我宁愿使用bash脚本自动执行此过程。 谢谢

NSURLSession中所有NSURLSessionTasks的平均进度

一个NSURLSession将允许你添加大量的NSURLSessionTask在后台下载。 如果你想检查一个NSURLSessionTask的进度,就像 double taskProgress = (double)task.countOfBytesReceived / (double)task.countOfBytesExpectedToReceive; 但是,检查NSURLSessionTasks中所有NSURLSessionTasks的平均进度的最佳方法是什么? 我想我会尝试平均所有任务的进展: [[self backgroundSession] getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *allDownloadTasks) { double totalProgress = 0.0; for (NSURLSessionDownloadTask *task in allDownloadTasks) { double taskProgress = (double)task.countOfBytesReceived / (double)task.countOfBytesExpectedToReceive; if (task.countOfBytesExpectedToReceive > 0) { totalProgress = totalProgress + taskProgress; } NSLog(@"task %d: %.0f/%.0f – %.2f%%", task.taskIdentifier, (double)task.countOfBytesReceived, (double)task.countOfBytesExpectedToReceive, taskProgress*100); […]

contentsize和contentOffset等同于NSScroll视图

我正在将应用程序从Ipad移植到mac。 (我知道这听起来很奇怪) 我坚持使用NSScrollview。 请指导我contentize,contentOffset在NSScrollview相当于。

Bundle.main.path(forResource:ofType:inDirectory :)返回nil

尽量不要大笑或者哭泣 – 我只是在20年之后才开始重新编码。 我花了超过4个小时看引用和尝试代码片断来获取Bundle.main.path打开我的文本文件,所以我可以读取我的应用程序的数据(我的下一步是适当地parsing它)。 if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt") { do { let contents = try String(contentsOfFile: filepath) print(contents) } catch { print("Contents could not be loaded.") } } else { print("newTest.txt not found.") } 结果是:“找不到newTest.txt”。 不pipe我如何将文件拖放到项目中,在Xcode中创build文件或使用文件 – >添加文件到…菜单项。