Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 快速拉动刷新不需要';不显示_Ios_Swift_Locationmanager_Pull To Refresh - Fatal编程技术网

Ios 快速拉动刷新不需要';不显示

Ios 快速拉动刷新不需要';不显示,ios,swift,locationmanager,pull-to-refresh,Ios,Swift,Locationmanager,Pull To Refresh,我已经在我的Swift项目的UITableView上成功添加了刷新拉,但在另一个ViewController上我无法显示它。 在其他视图上,代码相同,没有LocationManager功能。 我不知道我的错误在哪里 我的代码下方: import UIKit import CoreLocation class MainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, CLLocati

我已经在我的Swift项目的UITableView上成功添加了刷新拉,但在另一个ViewController上我无法显示它。 在其他视图上,代码相同,没有LocationManager功能。 我不知道我的错误在哪里

我的代码下方:

import UIKit
import CoreLocation



class MainViewController: UIViewController, UITableViewDataSource,   UITableViewDelegate, CLLocationManagerDelegate {

var locationManager: CLLocationManager!
var locationCoordinates: CLLocationCoordinate2D!

@IBOutlet weak var bannerView: GADBannerView!

var dati = NSMutableArray()
var datiComplete = NSDictionary()
@IBOutlet weak var tableView: UITableView!

var arrayOfData: [MyData] = [MyData]()

var url:NSURL!
var refreshControl = UIRefreshControl()
var dateFormatter = NSDateFormatter()
override func viewDidLoad() {

    super.viewDidLoad()


    self.locationManager = CLLocationManager()
    self.locationManager.delegate           = self
    self.locationManager.desiredAccuracy    = kCLLocationAccuracyBest   //Battery drain!
    self.locationManager.distanceFilter     = 1
    self.locationManager.requestWhenInUseAuthorization()
    self.locationManager.startUpdatingLocation()

    searchUser()


    self.dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
    self.dateFormatter.timeStyle = NSDateFormatterStyle.LongStyle


    self.refreshControl = UIRefreshControl()
    self.refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)


    self.tableView.insertSubview(refreshControl, atIndex: 0)

    self.handleRefresh()
}
func refresh(sender:AnyObject)
{
    println("Refresh work!")
    self.handleRefresh()
}
func handleRefresh() {

    if locationManager.location != nil {

        url = NSURL(string: "http://www.myURL.com/data.php?lat=\(locationManager.location.coordinate.latitude)&lon=\(locationManager.location.coordinate.longitude)&max=15&when=now")!
    } else {


        url = NSURL(string: "http://www.myURL.com/data.php?lat=41&lon=11&max=10&when=now")!
    }



    //println("Call URL!!")
    var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)

    request.HTTPMethod = "GET"

    request.setValue("application/json", forHTTPHeaderField: "Accept")
    var reponseError: NSError?
    var response: NSURLResponse?

    //var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {
        response, data, error in

        if (error != nil) {
            return
        }

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
            var error: NSError?
            self.dati = (NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &error) as! NSDictionary)["spots"] as! NSMutableArray

            if (error != nil){
                return
            }

            // **** Json Parsing *****

            dispatch_async(dispatch_get_main_queue()){
                self.tableView.reloadData()
                self.tableView.delegate = self

                self.tableView.dataSource = self


            }

        }

    })
    let now = NSDate()
    let updateString = "Last Updated at " + self.dateFormatter.stringFromDate(now)
    self.refreshControl.attributedTitle = NSAttributedString(string: updateString)
    if self.refreshControl.refreshing
    {
        self.refreshControl.endRefreshing()
    }

    self.tableView?.reloadData()
    refreshControl.endRefreshing()
}

func searchUser(){
    println("Start Search User")
    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.requestAlwaysAuthorization()
    self.locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){
    println("Start Location Manager Func")
    self.locationCoordinates = manager.location.coordinate
    self.locationManager.stopUpdatingLocation()
    println("**************** locations = \(self.locationCoordinates.latitude) \(self.locationCoordinates.longitude)")
}



override func viewWillAppear(animated: Bool) {

    super.viewWillAppear(animated)

    self.setNavigationBarItem()

}



override func didReceiveMemoryWarning() {

    super.didReceiveMemoryWarning()

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayOfData.count    
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: ViewCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! ViewCell
    cell.backgroundColor = UIColor.whiteColor()
    let usr = arrayOfData[indexPath.row]    
    cell.setCell(<Cell-data>)

    return cell

}

var selectedSpot:String? = nil
var selectedSpotIndex:Int? = nil

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "GoSpotDetails" {

        var tabBarC : TabBarController = segue.destinationViewController as! TabBarController


        var caseIndex = tableView!.indexPathForSelectedRow()!.row
        var selectedCase = self.arrayOfSpotsTemp[caseIndex]

        tabBarC.DataDetail = selectedCase

    }
}


}
导入UIKit
导入核心定位
类MainViewController:UIViewController、UITableViewDataSource、UITableViewDelegate、CLLocationManagerDelegate{
var locationManager:CLLocationManager!
变量位置坐标:CLLocationCoordinate2D!
@IBVAR bannerView:GADBannerView!
var dati=NSMutableArray()
var datiComplete=NSDictionary()
@IBVAR表格视图:UITableView!
var arrayOfData:[MyData]=[MyData]()
var-url:NSURL!
var refreshControl=UIRefreshControl()
var dateFormatter=NSDateFormatter()
重写func viewDidLoad(){
super.viewDidLoad()
self.locationManager=CLLocationManager()
self.locationManager.delegate=self
self.locationManager.desiredAccuracy=KCallocationAccuracyBest//电池电量耗尽!
self.locationManager.distanceFilter=1
self.locationManager.requestWhenUseAuthorization()
self.locationManager.startUpdatingLocation()
searchUser()
self.dateFormatter.dateStyle=NSDateFormatterStyle.ShortStyle
self.dateFormatter.timeStyle=NSDateFormatterStyle.LongStyle
self.refreshControl=UIRefreshControl()
self.refreshControl.attributeditle=NSAttributedString(字符串:“拉入刷新”)
self.refreshControl.addTarget(self,操作:“刷新:”,forControlEvents:UIControlEvents.ValueChanged)
self.tableView.insertSubview(刷新控件,索引:0)
self.handleRefresh()
}
func刷新(发送方:AnyObject)
{
println(“刷新工作!”)
self.handleRefresh()
}
func handleRefresh(){
如果locationManager.location!=零{
url=NSURL(字符串:”http://www.myURL.com/data.php?lat=\(locationManager.location.coordinate.latitude)&lon=\(locationManager.location.coordinate.longitude)&max=15&when=now“!
}否则{
url=NSURL(字符串:”http://www.myURL.com/data.php?lat=41&lon=11&max=10&when=now")!
}
//println(“调用URL!!”)
var请求:NSMutableURLRequest=NSMutableURLRequest(URL:URL)
request.HTTPMethod=“GET”
request.setValue(“application/json”,forHTTPHeaderField:“Accept”)
var REPORNSERROR:NSError?
var响应:nsurresponse?
//变量urlData:NSData?=NSURLConnection.sendSynchronousRequest(请求、返回响应:&response、错误:&ResponseError)
NSURLConnection.sendAsynchronousRequest(请求,队列:NSOperationQueue.mainQueue(),completionHandler:{
响应、数据、错误
如果(错误!=nil){
回来
}
调度异步(调度获取全局队列(调度队列优先级默认为0)){
var错误:N错误?
self.dati=(NSJSONSerialization.JSONObjectWithData(数据,选项:.MutableContainers,错误:&error)作为!NSDictionary)[“spots”]作为!NSMutableArray
如果(错误!=nil){
回来
}
//****Json解析*****
dispatch\u async(dispatch\u get\u main\u queue()){
self.tableView.reloadData()
self.tableView.delegate=self
self.tableView.dataSource=self
}
}
})
现在让我们=NSDate()
让updateString=“上次更新时间”+self.dateFormatter.stringFromDate(现在)
self.refreshControl.attributeditle=nsattributestring(字符串:updateString)
如果self.refreshControl.refreshing
{
self.refreshControl.endRefreshing()
}
self.tableView?.reloadData()
refreshControl.endRefreshing()
}
func searchUser(){
println(“开始搜索用户”)
self.locationManager.delegate=self
self.locationManager.desiredAccuracy=KCallocationAccuracyBest
self.locationManager.requestAlwaysAuthorization()
self.locationManager.startUpdatingLocation()
}
func locationManager(管理器:CLLocationManager!,didUpdateLocations位置:[AnyObject]!){
println(“启动位置管理器函数”)
self.locationCoordinates=manager.location.coordinate
self.locationManager.stopUpdatengLocation()
println(“***************位置=\(self.location座标.纬度)\(self.location座标.经度)”)
}
覆盖功能视图将出现(动画:Bool){
超级。视图将显示(动画)
self.setNavigationBarItem()
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回arrayOfData.count
}
func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell:ViewCell=tableView.dequeueReusableCellWithIdentifier(“cell”)作为!ViewCell
cell.backgroundColor=UIColor.whiteColor()
设usr=arrayOfData[indexPath.row]
cell.setCell()
返回单元
}
变量selectedSpot:字符串?=nil
var selectedSpotIndex:Int?=nil
覆盖函数prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject?){
如果segue.identifier==“GoSpotDetails”{
var tabBarC:TabBarController=segue.destinationViewController as!TabBarController
var caseIndex=tableView!.indexPathForSelectedRow()!.row
var selectedCase=self.arrayOfSpotsTemp[caseIndex]
tabBarC.DataDetail=selectedCase
}
}
}

非常感谢。

嗯,您的代码需要做很多更改。让我给你一些建议

  • 尝试使用
    tableView.addSubview(refreshControl,atIndex:0)
    而不是
    self.tableView.insertSubview(refreshControl)
    。查看“添加”和“插入”子视图之间的差异

  • 定义另一个函数来填充视图。例如,
    func populateView()

  • self.handleRefresh()
    替换为
    self.populateView()

  • 替换

    self.refreshControl.addTarget(
        self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged
    ) 
    

  • self.refreshControl.addTarget(
        self, action: "handleRefresh:", forControlEvents: UIControlEvents.ValueChanged
    )
    
    lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(
            self, action: "handleRefresh", forControlEvents: .ValueChanged
        )
        return refreshControl
    }()