将自定义对象附加到 NSArray 时出错
Error with appending custom object to NSArray
我创建了一个自定义对象。我已经使用 NSCoder 将自定义对象保存到 nsuserdefaults。我向该对象添加了一个 NSArray,并试图将另一个自定义对象附加到该数组。我在尝试这样做时不断收到此错误:"Value of type NSArray has no member append"。我怎样才能防止这个错误并能够使用这个自定义对象数组将我的自定义对象保存到 nsuserdefaults。
这是习俗 class:
class Person: NSObject, NSCoding {
var name: String!
var age: Int!
var image: UIImage!
var arr: NSArray!
required convenience init(coder decoder: NSCoder) {
self.init()
self.name = decoder.decodeObjectForKey("name") as! String
self.age = decoder.decodeObjectForKey("age") as! Int
self.image = decoder.decodeObjectForKey("image") as! UIImage
self.image = decoder.decodeObjectForKey("image") as! UIImage }
convenience init(name: String, age: Int, img: UIImage, array: NSArray) {
self.init()
self.name = name
self.age = age
self.image = img
self.arr = array
}
func encodeWithCoder(coder: NSCoder) {
if let name = name { coder.encodeObject(name, forKey: "name") }
if let age = age { coder.encodeObject(age, forKey: "age") }
if let img = image {coder.encodeObject(image, forKey: "image") }
if let arr = arr {coder.encodeObject(arr, forKey: "array") }
}
}
这里是保存和附加代码:
import UIKit
import Foundation
var newPerson = Person()
var oldPerson = Person(name: "John", age: 100, img: newPerson.image, array: [1, 2, 3, 4])
class ViewController: UIViewController {
@IBOutlet var image: UIImageView!
@IBOutlet var textField: UITextField!
@IBAction func Save(sender: AnyObject) {
newPerson.name = textField.text
newPerson.age = 10
newPerson.image = UIImage(named: "afghan_flag.jpg")
newPerson.arr.append(oldPerson)
let personData = NSKeyedArchiver.archivedDataWithRootObject(newPerson)
NSUserDefaults().setObject(personData, forKey: "personData")
}
@IBAction func Load(sender: AnyObject) {
if let loadedData = NSUserDefaults().dataForKey("personData") {
if let loadedPerson = NSKeyedUnarchiver.unarchiveObjectWithData(loadedData) as? Person {
print(loadedPerson.name)
}
}strong text
}
}
如果你这样定义,你可以有一个 Person 数组
var arrayPerson : [Person] = []
那么你可以使用 arrrayPerson.append(newPerson)
我创建了一个自定义对象。我已经使用 NSCoder 将自定义对象保存到 nsuserdefaults。我向该对象添加了一个 NSArray,并试图将另一个自定义对象附加到该数组。我在尝试这样做时不断收到此错误:"Value of type NSArray has no member append"。我怎样才能防止这个错误并能够使用这个自定义对象数组将我的自定义对象保存到 nsuserdefaults。
这是习俗 class:
class Person: NSObject, NSCoding {
var name: String!
var age: Int!
var image: UIImage!
var arr: NSArray!
required convenience init(coder decoder: NSCoder) {
self.init()
self.name = decoder.decodeObjectForKey("name") as! String
self.age = decoder.decodeObjectForKey("age") as! Int
self.image = decoder.decodeObjectForKey("image") as! UIImage
self.image = decoder.decodeObjectForKey("image") as! UIImage }
convenience init(name: String, age: Int, img: UIImage, array: NSArray) {
self.init()
self.name = name
self.age = age
self.image = img
self.arr = array
}
func encodeWithCoder(coder: NSCoder) {
if let name = name { coder.encodeObject(name, forKey: "name") }
if let age = age { coder.encodeObject(age, forKey: "age") }
if let img = image {coder.encodeObject(image, forKey: "image") }
if let arr = arr {coder.encodeObject(arr, forKey: "array") }
}
}
这里是保存和附加代码:
import UIKit
import Foundation
var newPerson = Person()
var oldPerson = Person(name: "John", age: 100, img: newPerson.image, array: [1, 2, 3, 4])
class ViewController: UIViewController {
@IBOutlet var image: UIImageView!
@IBOutlet var textField: UITextField!
@IBAction func Save(sender: AnyObject) {
newPerson.name = textField.text
newPerson.age = 10
newPerson.image = UIImage(named: "afghan_flag.jpg")
newPerson.arr.append(oldPerson)
let personData = NSKeyedArchiver.archivedDataWithRootObject(newPerson)
NSUserDefaults().setObject(personData, forKey: "personData")
}
@IBAction func Load(sender: AnyObject) {
if let loadedData = NSUserDefaults().dataForKey("personData") {
if let loadedPerson = NSKeyedUnarchiver.unarchiveObjectWithData(loadedData) as? Person {
print(loadedPerson.name)
}
}strong text
}
}
如果你这样定义,你可以有一个 Person 数组
var arrayPerson : [Person] = []
那么你可以使用 arrrayPerson.append(newPerson)