小编Geo*_*org的帖子

使用NSCoding将自定义Swift类保存到UserDefaults

我目前正在尝试将自定义Swift类保存到NSUserDefaults.这是我的Playground的代码:

import Foundation

class Blog : NSObject, NSCoding {

    var blogName: String?

    override init() {}

    required init(coder aDecoder: NSCoder) {
        if let blogName = aDecoder.decodeObjectForKey("blogName") as? String {
            self.blogName = blogName
        }
    }

    func encodeWithCoder(aCoder: NSCoder) {
        if let blogName = self.blogName {
            aCoder.encodeObject(blogName, forKey: "blogName")
        }
    }

}

var blog = Blog()
blog.blogName = "My Blog"

let ud = NSUserDefaults.standardUserDefaults()    
ud.setObject(blog, forKey: "blog")
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我收到以下错误

执行被中断,原因:信号SIGABRT.

在最后一行(ud.setObject...)

在带有消息的应用程序中,相同的代码也会崩溃

"属性列表格式无效:200(属性列表不能包含'CFType'类型的对象)"

有人可以帮忙吗?我在Maverick上使用Xcode 6.0.1.谢谢.

nsuserdefaults nscoding sigabrt swift

76
推荐指数
6
解决办法
5万
查看次数

在iPhone和iPad上具有自动布局左边距的UITableViewCell不同

我正在使用UITableView与静态单元格分组的选项屏幕/场景.一切都在使用Autolayout在Xcode 6.1/iOS 8.1.x/Storyboard中完成.在表组中有混合类型的单元格,有两种类型会导致我出现问题:

  1. 具有自定义样式的单元格
  2. 样式为"右侧细节"的单元格

在单元格#1上,我可以为标签和前导容器之间的左边距设置约束.在单元#2上,据我所知,我无法在Interface Builder中设置任何约束.我在单元格#1中的标签上设置了左边距,因此它与单元格#2中的标签对齐.iPhone上的一切看起来都不错,但是如果我在iPad上显示相同的表格,其中表格视图的容器大小是屏幕大小的一半,则单元格#2获得更多边距(动态?),而单元格#1保持绝对边距I在约束中设置.我还尝试使用属性"相对于边距"更改单元格#1中的左边距,但无效.

苹果手机:

iPhone上的表格

iPad(桌面宽度= 1/2屏幕尺寸)

iPad上的表格

所以问题是:如何在单元格#1中设置标签的约束,使其与单元格#2对齐.

这里还有一个Xcode 6.1示例项目的链接,用于演示该问题.在iPhone和iPad上运行以查看差异:

https://dl.dropboxusercontent.com/u/5252156/Code/tableViewTest.zip

这个问题可能与iPhone和iPad的布局静态表格单元格有关,但iOS 8也可能有所不同,因为现在一切都应该是自适应的.这就是我决定发布这个问题的原因.

margin uitableview ios autolayout

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

如何在Cloud Firestore中查询不存在的文档密钥

假设我有一个带有一些可选属性的数据模型.这可以是例如具有"firstname","lastname"和可选的"website"属性的用户对象.

在Cloud Firestore中,只有具有已知网站的用户文档才会设置"网站"属性,对于所有其他用户文档,此属性将不存在.

我现在的问题是如何在没有 "网站"属性的情况下查询所有用户文档.

谢谢.

firebase google-cloud-firestore

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

如何在iOS Swift项目中实现向下箭头/插入符号(如在iOS 9音乐应用程序中)?

我正在寻找在UILabel右侧创建向下箭头(插入符号?)的最佳方法,该视图以UINavigationItem为中心.

在此输入图像描述

在此输入图像描述

整个过程看起来应该像iOS 9音乐应用程序中的下降.标签的文本将在运行时更改,标签的标题/文本(包括箭头)应居中,如此屏幕截图所示:

IOS 9.2上的音乐应用程序的屏幕截图

目前我\u{25BE}在文本的末尾附加一个字符,如下所示:

self.lblSelectedAlbum.text = self.lblSelectedAlbum.text! + " \u{25BE}"
Run Code Online (Sandbox Code Playgroud)

但这有几个负面影响:

  1. 它看起来很笨拙
  2. 如果标签文本太长,则向下箭头将消失

关于如何实现这一目标的任何想法?谢谢!

xcode interface-builder uikit ios swift

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

Swift 4中的冗余一致性约束警告

我刚刚将Swift 3.1项目从Xcode 8.3.3迁移到Swift 4/Xcode 9 GM.我设法解决了大多数编译器警告,但是这个警告,我找不到任何与此相关的信息.代码在Xcode 8.3.3中编译时没有警告.我正在使用代码片段来说明问题.

警告确切的警告是

FirebaseArrayDelegate.swift:22:26: 
    Redundant conformance constraint 'T': 'FirebaseModel'
Run Code Online (Sandbox Code Playgroud)

并涉及func initialized(第三行)的声明.

public protocol FirebaseArrayDelegate: class {

    func update(with block: (()->Void)?)
    func initialized<T : FirebaseModel>(array: FirebaseArray<T>)
    func added<T : FirebaseModel>(child: T, at index: Int)
    func changed<T : FirebaseModel>(child: T, at index: Int)
    func removed<T : FirebaseModel>(child: T, at index: Int)
    func moved<T : FirebaseModel>(child: T, from oldIndex: Int, to newIndex: Int)
    func changedSortOrder()
    func cancelled(with error: Error)

}
Run Code Online (Sandbox Code Playgroud)

FirebaseModel定义为

public protocol FirebaseModel: AnyObject, Equatable …
Run Code Online (Sandbox Code Playgroud)

swift swift4

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

用不存在的 rawValue 初始化的枚举不会失败并返回 nil

我在操场(Xcode 9.0.1)中有以下代码:

import MapKit

enum Test: UInt {
    case first
    case second
    case third
}

let test = Test(rawValue: 4) as Any
print(test)           // nil

let type = MKMapType(rawValue: 999)
print(type == nil)    // false
print(type!.rawValue) // 999
Run Code Online (Sandbox Code Playgroud)

MKMapType 定义为

enum MKMapType : UInt
Run Code Online (Sandbox Code Playgroud)

由于 MKMapType 的最大值为 5,我希望枚举的初始值设定项失败并返回 nil。相反,它返回 999。我是否在这里错过了一些 ObjC/Swift 桥接,或者这可能是一个错误?

enums mapkit swift

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

OperationQueue 的“进度”属性在 iOS 13 中不起作用

iOS 13progressOperationQueue类中引入了该属性。同时,Apple 将operationsoperationCount属性标记为已弃用,这表明它们不应再用于报告队列进度。

我的问题是我无法让该progress属性按照我期望的方式工作(这基本上是开箱即用的)。此外,我找不到有关此新属性的任何文档(除了它现在存在的文档)。

我试图让它在一个新的 SingleView 项目中工作,该项目UIProgressView在 main 上有一个UIViewController。该示例深受https://nshipster.com/ios-13/的启发。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var progressView: UIProgressView!

    private let operationQueue: OperationQueue = {

        let queue = OperationQueue()
        queue.maxConcurrentOperationCount = 1
        queue.underlyingQueue = .global(qos: .background)

        return queue

    }()

    override func viewDidLoad() {

        super.viewDidLoad()

        self.progressView.observedProgress = operationQueue.progress

        self.operationQueue.cancelAllOperations()
        self.operationQueue.isSuspended = true

        for i in 0...9 {

            let operation = BlockOperation {
                sleep(1)
                NSLog("Operation …
Run Code Online (Sandbox Code Playgroud)

nsoperationqueue progress-bar swift ios13

2
推荐指数
1
解决办法
1489
查看次数

如何在Swift中计算2的第6个根?

我试图在Swift中计算2的第6个根,我找不到合适的函数.

这里有一篇名为" 如何找到值的第n个根? "的帖子,其中提出的解决方案是使用的

pow(2, (1/6))
Run Code Online (Sandbox Code Playgroud)

但我相信这不起作用,因为签名pow

func pow(_ x: Decimal, _ y: Int) -> Decimal
Run Code Online (Sandbox Code Playgroud)

所以上面公式的结果是1而不是1.122462 ...作为(1/6)舍入到0.

iPhone计算器可以做到,所以必须有办法:)

谢谢!

foundation square-root swift

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