存储自定义对象数组 Swift
Posted
技术标签:
【中文标题】存储自定义对象数组 Swift【英文标题】:Store Array of custom Objects Swift 【发布时间】:2015-02-18 20:20:42 【问题描述】:我有一个名为“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 输入的变量,以将它们保存到新的“条目”对象中,然后将其附加到 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】:如果你不想使用 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)
【讨论】:
在创建项目之前是否必须选中“使用 CoreData”复选框?还是没有这行得通?由于我在创建项目时没有检查它 是的,然后你必须为你的班级制作实体。我不确定在现有项目中添加 Core Data Model 有多容易,因为 Xcode 在您选中该框时已经提供了一些功能。 谢谢!我将尝试在启用 CoreData 的情况下构建它。 您的代码抛出错误:/ let appi = NSApplication.sharedApplication().delegate as! AppDelegate“使用未解析的标识符‘NSApplication’” 不知道为什么。这是很好的核心数据教程link以上是关于存储自定义对象数组 Swift的主要内容,如果未能解决你的问题,请参考以下文章