小编kel*_*lin的帖子

在Swift中捕获NSException

Swift中的以下代码引发NSInvalidArgumentException异常:

task = NSTask()
task.launchPath = "/SomeWrongPath"
task.launch()
Run Code Online (Sandbox Code Playgroud)

我该如何捕捉异常?据我所知,Swift中的try/catch是针对Swift中抛出的错误,而不是针对像NSTask这样的对象引发的NSExceptions(我猜这是用ObjC编写的).我是Swift的新手,所以可能是我错过了一些明显的东西......

编辑:这是一个关于bug的雷达(特别是对于NSTask):openradar.appspot.com/22837476

cocoa-touch exception foundation nsexception swift

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

指针缺少可空性类型说明符

在Xcode 7 GM中,我开始收到此警告:

指针缺少可为空类型说明符(_Nonnull,_Nullable或_Null_unspecified)

在以下函数声明中(NSUserDefaults扩展名)

- (void)setObject:(nullable id)value
           forKey:(NSString *)defaultName
    objectChanged:(void(^)(NSUserDefaults *userDefaults, id value))changeHandler
    objectRamains:(void(^)(NSUserDefaults *userDefaults, id value))remainHandler;
Run Code Online (Sandbox Code Playgroud)

为什么要显示此警告,我该如何解决?

objective-c ios objective-c-nullability

59
推荐指数
5
解决办法
4万
查看次数

是否可以将约束从一个视图复制到另一个视图?

假设我使用Interface Builder在故事板中使用自动布局创建UI.我可以将一些约束从一个视图复制或移动到另一个视图吗?

macos xcode storyboard ios

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

AVURLAsset获取视频大小

这非常令人沮丧.我正在尝试获取AVURLasset的大小,但是尽管naturalSizeXcode告诉我,这是在iOS5中不推荐使用的.

但是:什么是替代品?

我找不到任何关于如何在不使用«naturalsize»的情况下获取视频尺寸的线索......

xcode avurlasset ios5

23
推荐指数
5
解决办法
3万
查看次数

Watch Kit:可以通过编程方式振动手表吗?

在Watch Extension运行时是否可以振动手表?我们可以通过这种方式在iOS上实现它(迫使iPhone振动):

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
Run Code Online (Sandbox Code Playgroud)

我希望WatchKit上有类似的东西.

更新:我已向Apple雷达添加了问题,并收到了答案:

Engineering已确定您的错误报告(20019274)与另一个问题(19025053)重复,并将被关闭.

19025053仍然开放.

更新2: AudioServicesPlayAlertSound()不使用任何声音ID的手表模拟器.似乎不支持函数.

xcode objective-c watchkit

22
推荐指数
2
解决办法
5618
查看次数

我可以更改Apple Watch模拟器语言吗?

是否可以更改Apple Watch模拟器区域设置?我想测试我的手表应用程序的本地化.我可以在iPhone模拟器上更改语言,但手表模拟器始终使用英语.我找不到任何语言设置:

Apple Watch模拟器设置 Apple Watch Simulator设置一般(顶部) Apple Watch Simulator设置一般(机器人)

localization apple-watch watchkit

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

理解ARKit中的坐标空间

我已经阅读了有关ARKit的所有Apple指南,并观看了WWDC视频.但我无法理解如何绑定系统:

  1. 一个现实世界
  2. 一个装置
  3. 一个3D场景

相互连接.

我可以添加一个对象,例如SCNPlane:

let stripe = SCNPlane(width: 0.005, height: 0.1)
let stripeNode = SCNNode(geometry: stripe)
scene.rootNode.addChildNode(stripeNode)
Run Code Online (Sandbox Code Playgroud)

这将产生一个白色条纹,无论设备在那个时刻如何定向,它都将垂直定向.这意味着坐标系以某种方式受到引力的束缚!但是,如果我尝试每帧打印upAxis SCNScene的属性,无论我如何旋转iPhone,它都将是相同的.我也尝试打印stripeNode.worldTransform,它也没有改变.

ARKit欢迎任何理解坐标的帮助.

3d augmented-reality ios swift arkit

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

使用NSHashTable在Swift 3中实现Observer模式

添加多个代理而不是仅添加一个委托是一项非常常见的任务.假设我们有协议和类:

protocol ObserverProtocol
{
   ...
}

class BroadcasterClass
{
    // Error: Type 'ObserverProtocol' does not conform to protocol 'AnyObject'
    private var _observers = NSHashTable<ObserverProtocol>.weakObjects()
}
Run Code Online (Sandbox Code Playgroud)

如果我们试图强制ObserverProtocol遵守AnyObject协议,我们将得到另一个错误:

不支持使用'ObserverProtocol'作为符合协议'AnyObject'的具体类型

甚至可以在Swift 3.0中创建一组弱委托吗?

delegates observer-pattern swift swift3

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

符合协议并保持私有财产

我需要在一致的类中使用协议属性作为私有.但是编译器拒绝这样做.我该如何实现呢?

protocol ProtocolX: class {
    var x: Int { get set }

    func performAnyActionOnX()
}

extension ProtocolX {
    func performAnyActionOnX() {
        x = 5
        print(x)
    }
}

class A: ProtocolX {
    private var x:Int = 7
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

architecture protocols private swift

6
推荐指数
2
解决办法
3745
查看次数

UICollectionViewDropDelegate 在`dropSessionDidUpdate` 中错误的目标索引路径

我正在尝试在这个狭长的集合视图中实现拖放: 用户界面集合视图

它具有水平布局,具有不同大小的单元格和部分。

拖动交互效果很好,但我注意到UICollectionViewDropDelegate 中有一个问题:

func collectionView(
    _ collectionView: UICollectionView,
    dropSessionDidUpdate session: UIDropSession,
    withDestinationIndexPath destinationIndexPath: IndexPath?)
    -> UICollectionViewDropProposal {

    if let destination = destinationIndexPath {
        print(destination) // Prints WRONG index path!!!
        return UICollectionViewDropProposal(
            operation: .move, intent: .insertAtDestinationIndexPath
        )
    }

    return UICollectionViewDropProposal(
        operation: .cancel, intent: .unspecified
    )
}
Run Code Online (Sandbox Code Playgroud)

错误的目标索引路径被传递给collectionView(_:dropSessionDidUpdate:withDestinationIndexPath:).
因此,我无法正确确定该部分并确定该处是否可用。

drag-and-drop uikit ios uicollectionview swift

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