存储自定义对象Swift的数组

时间:2015-02-18 20:20:43

标签: arrays object swift save

我有一个名为" Entry"。

的课程

在那里我有不同的变量,如Int,NSDate和Float。

我有一个数组" listData"由这些元素组成。

这个" listData"填写TableView。如何存储和读取此数组?实现如何?

我试图遍历数组并保存" Entry"的单个元素。在加载时将它重新组合在一起的类。它似乎无法正常工作。

以下是我的一些代码:

我的入门级:

import Foundation

class Entry  {

let number      : Int
let date        : NSDate
let mileage     : Int
let trip        : Float
let speed       : Float
let consumption : Float

init(number: Int, date: NSDate, mileage: Int, trip: Float, speed: Float, consumption: Float) {


    self.number         = number
    self.date           = date
    self.mileage        = mileage
    self.trip           = trip
    self.speed          = speed
    self.consumption    = consumption
    }
}

然后我有一个数组的全局变量:

var listData = [Entry]()

在第二个ViewController上,我已经声明了一些采用Textfield输入的变量,将它们保存到一个新的" Entry"对象,然后将附加到listData数组:

listData.append(Entry(number: number_pass, date: date_pass, mileage: mileage_pass, trip: trip_pass, speed: speed_pass, consumption: consumption_pass))

我在代码中拥有的其他所有内容只是设置和管理Tableviews。

有没有办法使用UserDefaults?或者我必须使用CoreData吗?

希望你能帮忙! 干杯,尼克拉斯

1 个答案:

答案 0 :(得分:1)

如果您不想使用NSUserDefaults,则可以使用Core Data。这第一堂课只是为了让事情更容易:

class CoreDataHelper: NSObject {

    class func insertManagedObject(className: String, moc: NSManagedObjectContext) ->AnyObject {
        let managedObject: NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName(className, inManagedObjectContext: moc) as! NSManagedObject
        return managedObject
    }

    class func fetchEntities(className: String, withPredicate predicate: NSPredicate?, moc: NSManagedObjectContext) -> NSArray {
        let request: NSFetchRequest = NSFetchRequest()
        let entityDescription: NSEntityDescription = NSEntityDescription.entityForName(className, inManagedObjectContext: moc)!

        request.entity = entityDescription

        if predicate != nil {
            request.predicate = predicate!
        }

        request.returnsObjectsAsFaults = false

        let items: NSArray = moc.executeFetchRequest(request, error: nil)!
        return items
     }

}

在你的ViewController中:

@IBOutlet weak var myTableView: NSTableView!

// Your datastore
private var myArray = [Entry]()

// ManagedObjectContext
lazy var moc: NSManagedObjectContext? = {
    let appi = NSApplication.sharedApplication().delegate as! AppDelegate
    if let moc = appi.managedObjectContext {
        return moc
    } else {
        return nil
    }
    }()

func reloadTableView(sender: AnyObject) {
    let request = NSFetchRequest(entityName: "Entry")

    // Just an example of sort descriptor
    request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]

    var anyerror: NSError?

    let fetchedEntries = moc?.executeFetchRequest(request, error: &anyerror)

    if fetchedEntries == nil {
        println("Error fetching: \(anyerror)")
        return
    }

    myArray = fetchedEntries as! [Entry]

    myTableView.reloadData()
}

// Life cycle
override func viewDidLoad() {
    super.viewDidLoad()

    reloadTableView(self)

}