2015-12-01 40 views
1

您好,我正在學習Swift,並試圖將Parse實現到我的應用程序中。所以我有一個MapView有一些註釋。這些註解是從存儲在Parse數據庫中的座標繪製的。 Parse中的每個座標元組都有其他細節,如FirstName LastName和all。現在,一旦用戶點擊了mapView中的DETAILS按鈕。它將用戶帶到一個表視圖控制器,用戶可以看到所有與mapView中可見的座標有關的細節。直到現在一切正常。所以如果我在地圖視圖中有4個註釋。然後通過點擊細節我被重定向到表格視圖控制器,我可以看到有關mapView中所有座標/註釋的細節。現在我想要一個功能,用戶可以點擊表格視圖控制器單元,我可以將數據傳遞到與該特定單元有關的另一個視圖。因此,如果在表格視圖控制器用戶中單擊屬於地圖視圖上顯示的註釋之一的第4個單元格。我希望將第四個單元格細節傳遞給另一個視圖控制器。崩潰:只能調用 - 符合PFSubclassing的子類上的[PFObject init]

地圖視圖(具有多個註釋) - > tableview控制器(具有多個單元格) - >視圖控制器(屬於用戶單擊的單元格)。

問題:當我在任何表格視圖控制器單元格的點擊,這樣我可以看到,該單元的詳細另一個視圖控制器我的應用程序崩潰,我看到錯誤的

2015-11-30 21:38:42.998 LifeLine[53788:6661072] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can only call -[PFObject init] on subclasses conforming to PFSubclassing.' 

我已經把斷點在表視圖控制器中的PREPAREFORSEGUE方法。但即使在prepareforsegue方法斷點擊中我的應用程序已經崩潰。因此,碰撞發生在 - 我點擊單元格和在prepareforsegue上打斷點。

我的MapViewController:

import UIKit 
import MapKit 
import MessageUI 

class MultipleAnnotationViewController: UIViewController, MKMapViewDelegate, MFMailComposeViewControllerDelegate 
{ 
    var arrayOfPFObject: [PFObject] = [PFObject]() 
    var lat_ :Double = 0 
    var long_ :Double = 0 
    @IBOutlet weak var dispAnnotation: MKMapView! 
    let currentUser = PFUser.currentUser() 
    var pinAnnotationView:MKPinAnnotationView! 


    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     dispAnnotation.delegate = self 
     for coordinateItem in arrayOfPFObject 
     { 
      let pointAnnotation = MKPointAnnotation() 
      self.lat_ = coordinateItem["Latitude"] as! Double 
      self.long_ = coordinateItem["Longitude"] as! Double 
      pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: self.lat_, longitude: self.long_) 
      dispAnnotation.addAnnotation(pointAnnotation) 

      pointAnnotation.title = String(coordinateItem["FirstName"]) + " " + String(coordinateItem["LastName"]) 



      let miles = 10.0 
      let scalingFactor = abs((cos (2*M_PI*pointAnnotation.coordinate.latitude/360.0 ))) 
      var span = MKCoordinateSpan(latitudeDelta: 0, longitudeDelta: 0) 
      span.latitudeDelta = miles/69.0 
      span.longitudeDelta = miles/(scalingFactor * 69.0) 
      let region = MKCoordinateRegionMake(pointAnnotation.coordinate, span) 
      [ self.dispAnnotation.setRegion(region, animated: true)] 
     } 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    { 
     if segue.identifier == "TableView" 
     { 
      let controller = segue.destinationViewController as! TableViewController 

      controller.arrayOfPFObject = arrayOfPFObject 
     } 
     if segue.identifier == "TableView2" 
     { 
      let controller = segue.destinationViewController as! ChecklistViewController 

      controller.arrayOfPFObject = arrayOfPFObject 
     } 

    } 


    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? 
    { 
     guard !(annotation is MKUserLocation) 
      else 
     { 
      return nil } 
     let identifier = "com.domain.app.something" 
     var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier) as? MKPinAnnotationView 
     if annotationView == nil 
     { 
      annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) 
      annotationView?.pinTintColor = UIColor.redColor() 
      annotationView?.canShowCallout = true 
     } 
     else 
     { 
      annotationView?.annotation = annotation 
     } 
     return annotationView 
    } 
} 

我TableViewController:

我,我想顯示單擊的單元格的詳細
import UIKit 

class ChecklistViewController: UITableViewController 
{ 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

var arrayOfPFObject: [PFObject] = [PFObject]() 

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


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 
     let cell = tableView.dequeueReusableCellWithIdentifier(
      "ChecklistItem", forIndexPath: indexPath) 
     let label = cell.viewWithTag(1000) as! UILabel 
     print(arrayOfPFObject.count) 
      print(indexPath.row) 
      let coordinateItem = arrayOfPFObject[indexPath.row] 

      label.text = String(coordinateItem["Address"]) 
     return cell 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    { 
if segue.identifier == "call" 
    { 
    let controller = segue.destinationViewController as! CallEmailViewController 
if let indexPath = tableView.indexPathForCell(sender as! UITableViewCell) 
    { 
     controller.itemToEdit = arrayOfPFObject[indexPath.row] 
      } 

} 

    } 
} 

我的視圖控制器。

import UIKit 
import CoreLocation 
import MapKit 

class CallEmailViewController: UITableViewController 
{ 
    var itemToEdit: PFObject = PFObject() 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     mail() //print(arrayOfPFObject.count) 

    } 

    func mail() 
    { 
     print("") 
    } 
} 

以下是表格視圖圖像。只要我點擊任何表格視圖,我會得到錯誤。

enter image description here

回答

4

更改VAR itemToEdit:PFObject = PFObject()來

var itemToEdit: PFObject? 
+0

,讓我錯誤: 無法將類型的價值 '!PFObject。鍵入'(又名 'ImplicitlyUnwrappedOptional 。鍵入' )到指定的類型'PFObject' – Unbreakable

+0

答案已更新。 – ZHZ

+0

我已經在Tableview控制器中的覆蓋segue方法中放置斷點。甚至在segue斷點碰到我的應用程序崩潰之前。 – Unbreakable