小编Rob*_*ert的帖子

为什么Swift初始化器不能在超类上调用便捷初始化器?

考虑两个类:

class A {
    var x: Int

    init(x: Int) {
        self.x = x
    }

    convenience init() {
        self.init(x: 0)
    }
}

class B: A {
    init() {
        super.init() // Error: Must call a designated initializer of the superclass 'A'
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么不允许这样做.最终,每个类的指定初始化叫他们需要的任何值,那么为什么我要重复我自己Binit通过指定一个默认值x再次,当方便initA会做得很好?

initialization class swift

86
推荐指数
3
解决办法
2万
查看次数

如何使用Docker,Puppet和Vagrant开发LAMP Web应用程序?

在黑暗时代,我通常用于开发LAMP Web应用程序的设置是在我的机器上进行本地测试.PHP(在我的例子中),数据库和Web服务器都是本机安装的.

服务器设置了Apache和MySQL的标准安装,我有多个虚拟主机用于Web应用程序的不同部分.当我对我在本地计算机上的结果感到满意时,我会登录到服务器和git pull登台环境.假设一切都在服务器上运行,就像在我的机器上一样,我会为生产做同样的事情.

新起点…

所以现在我从头开始创建一个全新的Web应用程序,我想以"正确的方式"来做.我已经读过Docker,Vagrant和Puppet(以及Chef,虽然我个人更喜欢Puppet的依赖系统,而不是Chef的迭代过程).尽管我已经完成了所有的研究,但似乎仍有几个问题似乎无法找到答案:

是否应该为Web服务器(例如Apache),数据库服务器(例如MySQL)和Web应用程序的每个部分设置单独的Docker容器?

当我谈论Web应用程序的某些部分时,我的意思是像mysite.com,controlpanel.mysite.com等.这些"部分"将共享相同的数据库.

由于Docker似乎为Web和数据库服务器之类的东西提供了现成的容器,所以至少应该将这些容器放在单独的容器中.我的网络应用程序的不同部分也应该在不同的容器中吗?

Docker容器似乎被设计为可替换的,而不是我必须更新其中的软件.他们写的数据我不想放松怎么样?

数据库服务器将管理与我的数据库内容相关的文件(我想要备份).Web服务器将创建日志,我的Web应用程序将管理各种文件和缓存等.所有这些文件都需要在应用程序的容器之外写入(因为我可能在更新时替换它们?),所以他们去哪里?直接进入主机的文件系统?或者单独进入"Docker Volume"?如果他们进入Docker卷,我应该为数据库,Web服务器,应用程序等使用单独的卷吗?我可以像现在这样使用本地机器上的SFTP轻松访问内容吗?我不想在这里放松任何便利!

使用Puppet为开发服务器和生产服务器创建和管理Docker容器是一个好主意吗?

看来Puppet支持直接管理Docker容器,所以这似乎是从头开始轻松设置服务器或生产环境(使用Vagrant)的一种相当好的方法.

希望我已经问了一些相关的问题; 为开发和生产类似LAMP的网络应用程序获得一些适当的"最佳实践"会很棒,我发现它似乎没那么多!

lamp web-applications puppet vagrant docker

69
推荐指数
2
解决办法
2万
查看次数

快速向后滑动时,UITableViewCell不会被取消选中

我现在已经将我的三个应用程序更新到了iOS 7,但是在这三个应用程序中,尽管它们没有共享任何代码,但我遇到的问题是,如果用户滑动以返回导航控制器(而不是快速点击后退按钮) ,细胞将保持其选定状态.

对于这三个应用程序,一个使用以编程方式创建的自定义单元格,另一个使用在故事板中创建的自定义单元格,第三个使用UITableView的一个非常基本的子类中的默认单元格,也在故事板中.在所有三种情况下,细胞不会自行取消选择.如果用户缓慢滑动或按下后退按钮,则会正常取消选择.

这只发生在我的iOS 7应用程序中,Apple自己的应用程序和为iOS 7升级的第三方应用程序似乎都表现正常(虽然细胞取消选择的速度略有不同).

一定有什么我做错了,但我不确定是什么?

uitableview ios ios7

59
推荐指数
6
解决办法
1万
查看次数

响应者链如何在iPhone中工作?什么是"下一个响应者"?

这是文档说的:

如果[事件或动作消息]的第一响应者无法处理事件或动作消息,则它将其转发到称为响应者链的链接系列中的"下一个响应者".响应者链允许响应者对象将处理事件或动作消息的责任转移到应用程序中的其他对象.

如果响应者链中的对象无法处理事件或操作,它会将消息重新发送到链中的下一个响应者.消息向上传递到更高级别的对象,直到它被处理.如果未处理,应用程序将丢弃它.

好的,下一个响应者是什么?

是父视图吗?它背后的观点?iOS如何确定第一响应者和第二响应者?

iphone objective-c uiresponder ios

27
推荐指数
4
解决办法
2万
查看次数

如何为使用YouTube Data API v3上传的视频启用获利功能?

我在YouTube上有一个经过验证的合作伙伴频道,我正在尝试为通过YouTube数据API(v3)上传的视频启用获利功能.

该频道已启用获利功能,我已在频道设置→默认设置中启用了获利功能(虽然我觉得此页面仅用于设置标准手动上传页面的默认设置).我查看了API参考,但根本找不到与获利相关的任何内容.

是否有其他方法可以通过货币化方式自动上传新视频,或者我可以通过某种方式在API中启用它?

youtube youtube-api

12
推荐指数
2
解决办法
7564
查看次数

如何在使用Grand Central Dispatch处理某些内容时以模态方式正确显示"进度"表?

我正在尝试在包含单个进度条的窗口上显示工作表,以显示使用Grand Central Dispatch异步运行的某些长函数的进度.我几乎得到了它,但是不能让表格看起来像是焦点,可能是因为我没有使用runModalForWindow:或类似.

这大概就是我现在正在做的事情,它发生在主窗口按下按钮的结果:

    // Prepare sheet and show it...

    [NSApp beginSheet:progressSheet modalForWindow:window modalDelegate:nil didEndSelector:NULL contextInfo:NULL];

    [progressSheet makeKeyAndOrderFront:self];

    [progressBar setIndeterminate:NO];
    [progressBar setDoubleValue:0.f];
    [progressBar startAnimation:self];


    // Start computation using GCD...

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        for (int i = 0; i < 1000; i ++) {
            // Do some large computation here
            // ...

            // Update the progress bar which is in the sheet:
            dispatch_async(dispatch_get_main_queue(), ^{
                [progressBar setDoubleValue:(double)i];
            });
        }


        // Calculation finished, remove sheet on main thread

        dispatch_async(dispatch_get_main_queue(), ^{
            [progressBar …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c grand-central-dispatch

11
推荐指数
1
解决办法
3659
查看次数

所需的初始化程序和指定的初始化程序之间有什么区别?

我正在创建自己的自定义tableViewCell然后我得到一个错误说:

'required'initulator'init(coder :)'必须由'UITableViewCell'的子类提供

我查了一下,显然这也是实现它的必要条件.但这导致我对必需与指定初始化器的混淆

Apple Docs说:

必需的初始化器:

在定义类初始值设定项之前编写必需的修饰符,以指示该类的每个子类都必须实现该初始化程序:

指定的初始化程序

指定的初始值设定项是类的主要初始值设定项.指定的初始化程序完全初始化该类引入的所有属性,并调用适当的超类初始化程序以继续超类链的初始化过程.

以下陈述是否正确:

  • 必需的初始化程序始终是指定的初始化程序
  • 每个指定的初始化程序不一定是必需的初始化程序
  • 一个类只能有一个必需的初始值设定项,但它可以有多个指定的初始值设定项?

话虽如此,我仍然不完全理解他们的功能差异.

initialization designated-initializer swift

11
推荐指数
1
解决办法
3661
查看次数

如何找到适合录制到文件的最高分辨率AVCaptureDeviceFormat?

我正在使用AVFoundation从设备的相机录制到电影文件,使用AVCaptureMovieFileOutput.我希望允许用户在录制开始之前在高帧率和高分辨率模式之间切换,但我无法弄清楚你应该知道哪个AVCaptureDeviceFormat产生适合视频录制的最高分辨率.

例如,在我正在测试的iPod touch上,它列出了后置摄像头的以下设备格式:

<AVCaptureDeviceFormat: 0x13108e260 'vide'/'420v'  192x 144, { 2- 30 fps}, HRSI:3264x2448, fov:54.267, max zoom:153.00 (upscales @17.00), AF System:1, ISO:24.0-768.0, SS:0.000024-0.500000>
<AVCaptureDeviceFormat: 0x1310911a0 'vide'/'420f'  192x 144, { 2- 30 fps}, HRSI:3264x2448, fov:54.267, max zoom:153.00 (upscales @17.00), AF System:1, ISO:24.0-768.0, SS:0.000024-0.500000>
<AVCaptureDeviceFormat: 0x1310afa60 'vide'/'420v'  352x 288, { 2- 30 fps}, HRSI:2992x2448, fov:49.745, max zoom:153.00 (upscales @8.50), AF System:1, ISO:24.0-768.0, SS:0.000024-0.500000>
<AVCaptureDeviceFormat: 0x1310af9b0 'vide'/'420f'  352x 288, { 2- 30 fps}, HRSI:2992x2448, fov:49.745, max zoom:153.00 (upscales @8.50), AF …
Run Code Online (Sandbox Code Playgroud)

avfoundation ios avcapturedevice avcapturemoviefileoutput

8
推荐指数
1
解决办法
2728
查看次数

当shouldEnableLimits为true且lowerAngleLimit和upperAngleLimit设置时,SKPhysicsJointPin的行为不正确

我目前有一个布娃娃图,它由一个父节点(没有附加物理实体)和许多子节点组成,每个子节点都由一个圆体组成.圆圈SKPhysicsJointPin在每个圆圈之间相互连接,如下所示:

布娃娃的身影

每个SKPhysicsJointPin都有shouldEnableLimits = true,并且我目前使用的-0.05和0.05一个值lowerAngleLimitupperAngleLimit分别.

这种效果非常好并且可以防止形状变形过多,除非整个图形颠倒过来,在这种情况下,所有关节突然试图收缩,如下所示:

破碎的布娃娃形象

当数字完全颠倒时,关节很快收缩.当他再次旋转时,所有关节都恢复正常.为什么会这样?如何在关节上保持正确的角度?

编辑1:

我只是尝试在Objective-C中重写项目,以防它是由于一些奇怪的Swift错误; 结果这个问题仍然在Objective-C中表现出来,所以我删除了Swift标签.

我现在最好的猜测是,当它们所连接的物体在任一方向上旋转超过180°时,SpriteKit会错误地计算关节相对于世界的角度,因此将错误的角度传递给底层Box2D关节.

我不确定我是否应该不断更新低角度和高角度限制以匹配他们身体的世界角度,但似乎我不需要像身体非常接近颠倒一样关节停止正常工作.无论如何,我要继续尝试......

编辑2:

我现在很确定问题出现了,因为SpriteKit(我猜有充分的理由)修改zRotation值使其保持在-180°和180°之间.例如,如果节点顺时针旋转并且达到-180°,SpriteKit会自动将其值恢复到+ 180°.我很相信这种环绕会导致关节表现不规律,我只需要弄清楚如何抵消它......

编辑3:

我已经上传了演示此问题的示例应用程序(包括视频),正如Apple最初要求的那样:Xcode Project/Video

game-physics sprite-kit skphysicsbody skphysicsjoint

7
推荐指数
1
解决办法
865
查看次数

使用 xcrun simctl status_bar 更改或删除 iOS 模拟器上的运营商名称

从 iOS 13 开始,SimulatorStatusMagic不再有效,但很高兴 Apple 通过simctl status_bar.

但是我找不到任何方法来删除或更改“运营商”文本:

iOS 13 状态栏

设置--cellularMode notSupported会删除它,但也会删除蜂窝条。

有什么方法可以重现 SimulatorStatusMagic 以前的功能并仅删除或更改运营商名称?

编辑: Xcode 11.4 包含一个新参数来设置运算符名称,但它似乎不起作用。该文档提供了以下内容:

    --operatorName <string>
         Set the cellular operator/carrier name. Use '' for the empty string.
Run Code Online (Sandbox Code Playgroud)

xcode ios-simulator xcrun

7
推荐指数
1
解决办法
1119
查看次数