我正在尝试构建一个面向对象的iOS应用程序,并且在我的Swift类文件中调用表格重新加载(UI交互)时遇到了问题。
如果我不使用对象并将所有内容写入InterfaceController的viewDidLoad方法中,一切都可以正常运行...但是如果我将其放入类中,则无法正常工作。
我正在使用异步请求来从Web服务加载JSON数据。接收到数据后,我将此数据用作我的表视图的数据源。似乎在启动后初始化表视图时没有数据,因此需要在完成异步请求后调用tableview的reload()方法。
以下是详细信息:
主TableController
我是否在错误的道路上,使用对象并与用户界面交互?
如果我不使用对象并将所有内容写入InterfaceController的viewDidLoad方法中,一切都可以正常运行...但是如果我将其放入类中,则无法正常工作。
我正在使用异步请求来从Web服务加载JSON数据。接收到数据后,我将此数据用作我的表视图的数据源。似乎在启动后初始化表视图时没有数据,因此需要在完成异步请求后调用tableview的reload()方法。
以下是详细信息:
主TableController
import UIKit;
class DeviceOverview: UITableViewController {
@IBOutlet var myTableView: UITableView!
var myDevices = Array<String>();
var myDevicesSection = NSMutableDictionary()
var deviceObjects = Array<NSDictionary>();
var mappingSectionIndex = Array<String>();
var sharedUserDefaults = NSUserDefaults(suiteName: "group.barz.fhem.SharingDefaults")
// THIS IS AN ATTEMPT TO give the class itself as PARAMETER
// ALSO TRIED TO USE myTableView (IBOutlet)
var fhem :FHEM = FHEM(tableview : self)
override func viewDidLoad() {
super.viewDidLoad()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return self.fhem.sections.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var devicesInSection : Array<NSDictionary> = self.fhem.sections[self.fhem.mappingSectionIndex[section]] as! Array<NSDictionary>
return devicesInSection.count;
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("device", forIndexPath: indexPath) as! TableViewCell
let sectionName : String = fhem.mappingSectionIndex[indexPath.section]
if let devices : Array<NSDictionary> = self.fhem.sections.objectForKey(sectionName) as? Array<NSDictionary> {
let device = devices[indexPath.row]
var alias : NSString?;
if let attr : NSDictionary = device.objectForKey("ATTR") as? NSDictionary {
alias = attr.objectForKey("alias") as? String
}
if (alias != nil) {
cell.deviceLabel.text = alias as? String
}else{
if let deviceName : String = device.objectForKey("NAME") as? String {
cell.deviceLabel.text = deviceName
}
}
}
return cell
}
FHEM类
import UIKit
class FHEM: NSObject {
var devices : [NSDictionary]
var sections : NSMutableDictionary
var deviceNames : [String]
var mappingSectionIndex : [String]
var myTableViewController : DeviceOverview
init(tableview : DeviceOverview){
self.devices = Array<NSDictionary>()
self.sections = NSMutableDictionary()
self.deviceNames = Array<String>()
self.mappingSectionIndex = Array<String>()
self.myTableViewController = tableview
super.init()
let url = NSURL(string: "xyz");
var request = NSURLRequest(URL: url!);
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
(response, data, error) in
if let jsonData: NSData? = data {
// do some great stuff
//
// this is an attempt to call the table view to reload
self.myTableViewController.myTableView.reloadData()
}
}
}
}
如果我试图将self
变量放入构造函数中,则会引发编译错误。
var fhem :FHEM = FHEM(tableview : self)
如果我尝试直接将UITableView
放入构造函数中,它也无法工作。
var fhem :FHEM = FHEM(tableview : myTableView)
我是否在错误的道路上,使用对象并与用户界面交互?