使用 Swift 更新 NSCoding/NSObject 数组中的字符串 2

Update a String in an NSCoding/NSObject Array using Swift 2

我有一个 iOS 项目,我正在使用 Xcode 和 Swift2。我有一个 class 类型 NSObjectNSCoding:

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。它使用 UITextFieldUIButton 提交并保存 (NSCoding) 用户输入的项目到 array 并重新加载 TableView用户看到了。

UIButton@IBAction 包括:

self.fileName = nameTextField.text

let report = ReportDetails(fileName: self.fileName)
self.details.append(report!)

detailsvar 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
*/