使用 Swift 更新 NSCoding/NSObject 数组中的字符串 2
Update a String in an NSCoding/NSObject Array using Swift 2
我有一个 iOS 项目,我正在使用 Xcode 和 Swift2。我有一个 class
类型 NSObject
和 NSCoding
:
class ReportDetails: NSObject, NSCoding {
var fileName: String
static let DocumentsDirectory = NSFileManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("details")
struct PropertyKey {
static let fileNameKey = "fileName"
}
init?(fileName: String) {
self.fileName = fileName
super.init()
if fileName.isEmpty {
return nil
}
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(fileName, forKey: PropertyKey.fileNameKey)
}
required convenience init?(coder aDecoder: NSCoder) {
let fileName = aDecoder.decodeObjectForKey(PropertyKey.fileNameKey) as! String
self.init(fileName: fileName)
}
}
然后显示在 Tableview
中,显示 TableViewCell
中的 fileName
。它使用 UITextField
和 UIButton
提交并保存 (NSCoding
) 用户输入的项目到 array
并重新加载 TableView
用户看到了。
UIButton
的 @IBAction
包括:
self.fileName = nameTextField.text
let report = ReportDetails(fileName: self.fileName)
self.details.append(report!)
details
是 var details = [RecipeDetails]()
在 @IBAction
代码之外。
我有一种方法可以让用户使用 UITextField
重命名 fileName
,但是当我转到 append
时,它只会创建一个新的。如果用户也需要,我如何更新名称并将其保存到数组中。除了 .append
之外还有什么可以用来简单更新的吗?或者 NSCoding
是只写类型的保存?我想要的只是一个简单的重命名并使用 NSCoding
保存。
可能我不明白你的问题。如我所见,您希望更新 Swift 数组中 class 'saved' 的 属性。我在那里看不到与 NSObject 或 NSCoding 的任何关系。
class C {
var txt: String
init(txt: String) {
self.txt = txt
}
}
var arr: [C] = []
arr.append(C(txt: "a"))
arr.append(C(txt: "b"))
dump(arr)
/*
▿ 2 elements
▿ [0]: C #0
- txt: a
▿ [1]: C #1
- txt: b
*/
更新数组中 class 'stored' 的一些 属性 实例很简单。您需要知道实例在数组(索引)中的位置和 属性 的新值,仅此而已。
arr[0].txt = "A"
dump(arr)
/*
▿ 2 elements
▿ [0]: C #0
- txt: A
▿ [1]: C #1
- txt: b
*/
我有一个 iOS 项目,我正在使用 Xcode 和 Swift2。我有一个 class
类型 NSObject
和 NSCoding
:
class ReportDetails: NSObject, NSCoding {
var fileName: String
static let DocumentsDirectory = NSFileManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("details")
struct PropertyKey {
static let fileNameKey = "fileName"
}
init?(fileName: String) {
self.fileName = fileName
super.init()
if fileName.isEmpty {
return nil
}
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(fileName, forKey: PropertyKey.fileNameKey)
}
required convenience init?(coder aDecoder: NSCoder) {
let fileName = aDecoder.decodeObjectForKey(PropertyKey.fileNameKey) as! String
self.init(fileName: fileName)
}
}
然后显示在 Tableview
中,显示 TableViewCell
中的 fileName
。它使用 UITextField
和 UIButton
提交并保存 (NSCoding
) 用户输入的项目到 array
并重新加载 TableView
用户看到了。
UIButton
的 @IBAction
包括:
self.fileName = nameTextField.text
let report = ReportDetails(fileName: self.fileName)
self.details.append(report!)
details
是 var details = [RecipeDetails]()
在 @IBAction
代码之外。
我有一种方法可以让用户使用 UITextField
重命名 fileName
,但是当我转到 append
时,它只会创建一个新的。如果用户也需要,我如何更新名称并将其保存到数组中。除了 .append
之外还有什么可以用来简单更新的吗?或者 NSCoding
是只写类型的保存?我想要的只是一个简单的重命名并使用 NSCoding
保存。
可能我不明白你的问题。如我所见,您希望更新 Swift 数组中 class 'saved' 的 属性。我在那里看不到与 NSObject 或 NSCoding 的任何关系。
class C {
var txt: String
init(txt: String) {
self.txt = txt
}
}
var arr: [C] = []
arr.append(C(txt: "a"))
arr.append(C(txt: "b"))
dump(arr)
/*
▿ 2 elements
▿ [0]: C #0
- txt: a
▿ [1]: C #1
- txt: b
*/
更新数组中 class 'stored' 的一些 属性 实例很简单。您需要知道实例在数组(索引)中的位置和 属性 的新值,仅此而已。
arr[0].txt = "A"
dump(arr)
/*
▿ 2 elements
▿ [0]: C #0
- txt: A
▿ [1]: C #1
- txt: b
*/