【发布时间】:2015-12-19 07:47:49
【问题描述】:
我开始使用 struct,现在我被困在第一个 VC 上,它在另一个 VC 中按我期望的那样工作。这是我在第一个 VC 中的内容(我应该在单独的文件中包含结构吗?)
我需要使用 lVisitors = ListVisitors.sharedInstance 在我的第一个 VC 中填充表格视图(其他 VC 似乎可以工作)
struct ListVisitors{
static var sharedInstance = [Visitor]()
static func register()
{
//NSUserDefaults.standardUserDefaults().registerDefaults( ["tasks" : [String]()])
}
static func load()
{
//Task.tasks = NSUserDefaults.standardUserDefaults().objectForKey("tasks") as! [String]
}
static func save()
{
//NSUserDefaults.standardUserDefaults().setObject(Task.tasks, forKey:"tasks")
}
static func append(visitor : Visitor)
{
//Task.tasks.append(string)
ListVisitors.sharedInstance.append(visitor)
}
}
class ScannerViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AVCaptureMetadataOutputObjectsDelegate {
现在在第一个 VC 中不起作用但似乎在另一个 VC 中起作用的部分
第一个 VC 返回 Global 0
let lVisitors = ListVisitors.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
// global testing
self.testPopulateData()
print("Global \(lVisitors.count)")
func testPopulateData 将一些测试数据添加到 ListVisitors.sharedInstance
其他 VC 返回 test4
let lVisitors = ListVisitors.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
print(" test\(lVisitors.count)")
}
[编辑] 在我的第一个 VC 中,在 func var ListVisitors.sharedInstance 中似乎有值,比如
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let lVisitors = ListVisitors.sharedInstance //shouldn't have to
print("Row Global \(lVisitors.count)")
return scannedVisitors.count //other test way
}
[编辑 2] 我想我想出了一个可行的解决方案(tx @vadian 和 @Entalpi)
我将 testPopulateData 函数添加到我的自定义类中,并将其重命名为 load()(将来我喜欢用 web 服务文件替换它)。在我的第一个 VC 中声明了一个实例变量
var lVisitors = [Visitor]()
我在 viewDidLoad() 中添加了以下内容
ListVisitors.load()
lVisitors = ListVisitors.sharedInstance
[编辑 3] 这个类似乎可以工作,但@vadian 推荐一个单例,那么我如何将这个类重写为一个单例?
class ListVisitors{
static var sharedInstance = [Visitor]()
// init(sharedInstance:Visitor){ // self.sharedInstance = sharedInstance // }
static func register()
{
//NSUserDefaults.standardUserDefaults().registerDefaults( ["tasks" : [String]()])
}
static func load()
{
//Task.tasks = NSUserDefaults.standardUserDefaults().objectForKey("tasks") as! [String]
var visitor = Visitor(visitorName: "From Class Matt", visitorCompany: "Google", visitorPlace: "San Diego", visitorPhone: "94888484", visitorEmail: "matt@google.com")
sharedInstance = [visitor]
visitor = Visitor(visitorName: "From Class John", visitorCompany: "nike", visitorPlace: "New York", visitorPhone: "94888484", visitorEmail: "john@nike.com")
// ListVisitors.sharedInstance += [visitor]
sharedInstance += [visitor]
visitor = Visitor(visitorName: "From Class Troy", visitorCompany: "nike", visitorPlace: "New York", visitorPhone: "94888484", visitorEmail: "troy@nike.com")
// ListVisitors.sharedInstance += [visitor]
sharedInstance += [visitor]
// append
visitor = Visitor(visitorName: "From Class Julian", visitorCompany: "leica", visitorPlace: "Tokyo", visitorPhone: "123411234", visitorEmail: "julian@shoot.co.jp")
// ListVisitors.append(visitor)
sharedInstance.append(visitor)
}
static func save()
{
//NSUserDefaults.standardUserDefaults().setObject(Task.tasks, forKey:"tasks")
}
static func append(visitor : Visitor)
{
//Task.tasks.append(string)
ListVisitors.sharedInstance.append(visitor)
}
static func delete(index: Int) {
ListVisitors.sharedInstance.removeAtIndex(index)
print("remove item")
}
}
【问题讨论】:
-
您可以始终在函数
viewDidLoad中检索数据 (ListVisitors.sharedInstance),而不是在任何可能太快且不可靠的函数之外。 -
@vadian 当我在 viewDidLoad 中检索数据时,我无法访问我的 tableview 函数中的数据??
-
当然我的意思是声明一个实例变量来保存数组。
-
所以在另一个 VC 中这样的东西应该可以工作吗?
var lVisitors = [Visitor]() override func viewDidLoad() { super.viewDidLoad() lVisitors = ListVisitors.sharedInstance print(" test \(lVisitors.count)")但它返回测试 0(应该是 3) -
也许
viewDidLoad还为时过早。试试viewWillAppear
标签: ios struct uiviewcontroller