小编Dal*_*ale的帖子

无法使用NSCoding反序列化嵌套类

我有一个复杂的类,有很多嵌套类到多个深层,它们被序列化并存储在CoreData表中.问题是,由于升级到Swift 3类的实例无法反序列化,因此在尝试解码嵌套类的实例时失败.

为了说明问题,使用实现NSCoding的内部类创建一个类定义:

进口基金会

class Foo : NSObject, NSCoding {

    class Bar : NSObject, NSCoding {
        var x : Int

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

        required init?(coder aDecoder: NSCoder) {
            self.x = aDecoder.decodeInteger(forKey: "x")
        }

        func encode(with aCoder: NSCoder) {
            aCoder.encode(x, forKey:"x")
        }
    }

    var bar:Bar

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

    required init?(coder aDecoder: NSCoder) {
        self.bar = aDecoder.decodeObject(forKey: "bar") as! Bar
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(bar, forKey:"bar")
    }
}
Run Code Online (Sandbox Code Playgroud)

然后构建单元测试:

import XCTest
@testable import …
Run Code Online (Sandbox Code Playgroud)

swift swift3

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

如何防止xcode将<##>视为代码段占位符

我想在Objective C程序中的文字字符串中包含<##>.但是,Xcode会自动替换字符串,认为它应该是代码片段中使用的占位符.

例如

NSString *pattern = @"<#foo#>"
Run Code Online (Sandbox Code Playgroud)

尝试将其放入Xcode中,它将重新显示为foo的占位符.

在实际程序中,字符串是这样的RE,<#(.*)#>并且令人惊讶的是,代码实际上按预期工作 - 该问题仅在Xcode的显示中表现出来.真正的问题是,这会造成一种脆弱的情况,在编辑器中,很容易导致文本被意外替换.

作为一种解决方法,我可以从它的部分构造字符串

NSString *p1 = @"<#(.*)";
NSString *p2 = @"#>";
NSString *pattern = [NSString stringWithFormat:@"%@%@",p1,p2];
Run Code Online (Sandbox Code Playgroud)

但那不是很令人满意.

有没有人知道在Xcode中覆盖此行为的更好方法?

xcode objective-c token code-snippets

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

标签 统计

code-snippets ×1

objective-c ×1

swift ×1

swift3 ×1

token ×1

xcode ×1