我正在尝试构建一个面向对象的iOS应用程序,但是从一个我的swift类文件调用表重新加载(ui交互)时遇到了问题。
如果我在没有对象的情况下工作,并在InterfaceController的viewDidLoad方法中编写所有内容,则一切正常…但是如果我将其放入类中则不行。
我正在使用异步请求以便从Web服务加载json数据。接收到数据后,我将这些数据用作表视图的数据源。似乎tableview是在启动后初始化的,没有数据,因此必须在完成异步请求之后在tableview上调用reload()。
因此,这里是详细信息:
主表控制器
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)
我是否在使用对象并与ui交互时走完全错误的道路?
您只需在异步任务完成后发布通知:
NSNotificationCenter.defaultCenter().postNotificationName("refreshMyTableView", object: nil)
向该通知添加观察者到您的DeviceOverview类方法viewDidLoad:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshList:", name:"refreshMyTableView", object: nil)
并添加将在您的DeviceOverview类上触发的方法
func refreshList(notification: NSNotification){
myTableView.reloadData()
}
问题内容: 我在伪操作环境中工作,我们在收到数据后制作新图像。有时,当输入新数据时,我们需要重新打开图像并更新该图像以创建合成,添加叠加等。除了添加到图像之外,还需要修改标题,图例等。 matplotlib中有内置的东西可以让我存储和重新加载matplotlib.pyplot对象以供以后使用吗?它需要保持对所有相关对象(包括图形,线条,图例等)的访问。也许咸菜是我想要的,但我对此表示怀疑。 问题答
我目前正在尝试将类加载到我的应用程序中,这样我就可以过滤掉那些不包含任何test/-方法的类。我希望以后在我的应用程序中运行这些测试。 到目前为止,一切都很好-除了我正在使用的(或者可能是任何)似乎没有实际重新加载位于我的应用程序类路径上的类。 更准确地说,我的应用程序的用户首先选择一些源文件。然后将它们复制到临时位置,并将许多正则表达式匹配/替换对应用于原始源文件的副本。接下来,拷贝被编译,然后
问题内容: 我在iframe中有我的登录页面,并希望在iframe中使用ajax和jquery重新加载父窗口而不刷新,但是我遇到这样的错误 请帮忙! 问题答案: 我可以通过使用javascript重新加载页面来实现 然后我触发了一个触发器以打开目标iframe 我需要一个特殊条件的系统。这可能会帮助处于类似状况的其他人。
问题内容: 第二天我不能用桌子解决问题。 我们有一个segmentedControl,它在更改时会更改表。假设控件段中有3个元素,并且相应地,有3个数组(重要的是,它们的大小不同),在更改segmentedControl时,我需要向上滚动表。 看起来一切都很简单:contentOffset = .zero和reloadData() 但。这行不通,我不知道为什么表格不能向上滚动。 唯一有效的方法:
努力将json从URL上的文件(myData.json)加载到对象中,以便访问属性值。 --数据立即加载,我在应用程序中非常需要它。 -我将访问整个应用程序中的数据,而不仅仅是数据加载后立即发生的一个函数的一部分。 --我已确保文件中的数据格式正确。 按照jQuery API上的示例,我不应该做一些简单的事情,比如: 警报(jqxhr.my财产); 得到价值吗?我错过了哪一步?我试过做评估和其他类
问题内容: 我整天都在这个问题上。我的问题是如何在实例上进行MethodHandle.invokeExact调用,该实例的类类型在程序运行时动态加载。为了使问题更清楚,我在下面显示我的示例代码: 在此示例中,expClass是动态加载的,其类类型为。下一行的obj实例被声明为BaseTemplate,其真实类型为。类AddSample是BaseTemplate的子类。然后,向其添加函数创建了一个M