我有一个复杂的类,有很多嵌套类到多个深层,它们被序列化并存储在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) 我想在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中覆盖此行为的更好方法?