UICollectionViewFlowLayoutBreakForInvalidSizes在调试器中捕获它

时间:2018-02-27 07:49:49

标签: ios uicollectionview swift4

我正在尝试创建一个座位图布局功能,它采用坐标并创建一个地图,我想提供地图包含的部分的值。我正在使用自定义collectionViewLayout来创建单元格,但我在标题中收到了该错误。

这是我的协议 -

  protocol SeatMapDelegate: class {

    func getSectionCoordinates() -> [Int]

  }

定义 -

func getSectionCoordinates() -> [Int] {
        return sectionHeader
    }

然后我将值分配给数组

  var sectionHeader = [Int]()
  sectionHeader=(delegate?.getSectionCoordinates())!

1 个答案:

答案 0 :(得分:0)

下面的代码是我的搜索项目,并在地图上找到坐标: 也许帮助你

//  ViewController.swift
//  MapKit Starter
//
//  Created by Ehsan Amiri on 10/25/16.
//  Copyright © 2016 Ehsan Amiri. All rights reserved.
//

import UIKit
import MapKit
import Foundation

class ViewController: UIViewController {
    @IBOutlet var mapView: MKMapView?
    @IBOutlet weak var text: UITextField!


    var index = 0  
    var indexx = 0



    let locationManager = CLLocationManager()

    var picName:String?


    var place :MKAnnotation?
    var places = [Place]()

    var place1 :MKAnnotation?
    var places1 = [Place]()


    override func viewDidLoad() {

        super.viewDidLoad()

        //downpic()
        self.requestLocationAccess()
        }


    override func viewWillAppear(_ animated: Bool) {

        let defaults = UserDefaults.standard
        let age = defaults.integer(forKey: "maptype")
        switch (age) {
        case 0:
            mapView?.mapType = .standard
        case 1:
            mapView?.mapType = .satellite
        case 2:
            mapView?.mapType = .hybrid
        default:
            mapView?.mapType = .standard
        }

    }




    @IBAction func info(_ sender: Any) {

    }


    override var prefersStatusBarHidden: Bool {
        return true
    }

    func requestLocationAccess() {
        let status = CLLocationManager.authorizationStatus()

        switch status {
        case .authorizedAlways, .authorizedWhenInUse:
            return

        case .denied, .restricted:
            print("location access denied")

        default:
            locationManager.requestWhenInUseAuthorization()
        }
    }

    @IBAction func textField(_ sender: Any) {


        mapView?.removeOverlays((mapView?.overlays)!)
        mapView?.removeAnnotations((mapView?.annotations)!)

        self.server()
        _ = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(self.server), userInfo: nil, repeats: true)




        let when = DispatchTime.now() + 1.5
        DispatchQueue.main.asyncAfter(deadline: when) {
            if self.indexx != 0 {
                self.addAnnotations()
                self.addPolyline()
            }
        }


    }


    @objc func server() {


        place = nil
        places = [Place]()

        place1 = nil
        places1 = [Place]()

        indexx = 0

        let id  = text.text
        print("id=\(id!)")

        let url = URL(string: "my server")!
        var request = URLRequest(url: url)
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.httpMethod = "POST"
        let postString = "id=\(id!)"
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data else {                                                 // check for fundamental networking error
                print("error=\(String(describing: error))")
                return
            }

            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print("response = \(String(describing: response))")
            }



            let responseString = String(data: data, encoding: .utf8)
            print("responseString = \(String(describing: responseString))")


            let stringgg = "notFound\n\n\n\n"

            if responseString == stringgg {
                print(stringgg)
            }else{
                let json = try! JSONSerialization.jsonObject(with: data, options: [])
                let betterJSON = json as! NSArray
                let jsonCount = betterJSON.count

                print(betterJSON)

                for item in betterJSON {

                    self.indexx += 1
                    let dictionary = item as? [String : Any]
                    let title = dictionary?["title"] as? String
                    let subtitle = dictionary?["description"] as? String
                    let latitude = dictionary?["latitude"] as? Double ?? 0, longitude = dictionary?["longitude"] as? Double ?? 0

                    self.place = Place(title: title, subtitle: subtitle, coordinate: CLLocationCoordinate2DMake(latitude , longitude ))
                    self.places.append(self.place as! Place)

                    print("latttt",longitude)

                    if self.indexx == 1{

                        let shipid = UserDefaults.standard
                        shipid.set(title, forKey: "origin")
                        shipid.set(subtitle, forKey: "date")
                    }


                    if  jsonCount == self.indexx{
                        let shipid = UserDefaults.standard
                        shipid.set(title, forKey: "location")

                        self.place1 = Place(title: title, subtitle: subtitle, coordinate: CLLocationCoordinate2DMake(latitude , longitude ))
                        self.places1.append(self.place1 as! Place)
                    }

                }

            }
        }

        task.resume()
        let when = DispatchTime.now() + 1.5
        DispatchQueue.main.asyncAfter(deadline: when) {
            if self.indexx != 0 {
                self.addAnnotations()
                self.addPolyline()
            }
        }

    }


    func addAnnotations() {

        print("hhhh",places)

        mapView?.delegate = self


        mapView?.removeAnnotations((mapView?.annotations)!)
        mapView?.addAnnotations(places1)

        let overlays = places1.map { MKCircle(center: $0.coordinate, radius: 100) }
        mapView?.addOverlays(overlays)

    }



    func addPolyline() {
        var locations = places.map { $0.coordinate }
        let polyline = MKPolyline(coordinates: &locations, count: locations.count)
        //        print("Number of locations: \(locations.count)")
        index = locations.capacity



        mapView?.add(polyline)
    }


}

extension ViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if annotation is MKUserLocation {
            return nil
        }

        else  {
            let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "annotationView") ?? MKAnnotationView()



            annotationView.image = UIImage(named:"place icon")
            annotationView.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
            annotationView.canShowCallout = true
            return annotationView
        }
    }

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if overlay is MKCircle {
            let renderer = MKCircleRenderer(overlay: overlay)
            renderer.fillColor = UIColor.black.withAlphaComponent(0.5)
            renderer.strokeColor = UIColor.blue
            renderer.lineWidth = 2
            return renderer

        } else if overlay is MKPolyline {
            let renderer = MKPolylineRenderer(overlay: overlay)
            renderer.strokeColor = UIColor.orange
            renderer.lineWidth = 2
            return renderer
        }


        return MKOverlayRenderer()
    }

    func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {


        //guard let annotation = view.annotation as? Place, let title = annotation.title else { return }

        let shipidname = text.text

        let shipid = UserDefaults.standard
        shipid.set(shipidname, forKey: "shipid")

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let secondViewController = storyboard.instantiateViewController(withIdentifier: "shipinfo")
        self.present(secondViewController, animated: true, completion: nil)



    }



}