2016-12-01 86 views
0

我已經更新了我的代碼從SWIFT 2.3至3迅速得到&許多錯誤移除所有的人,但來到這裏卡住問題,同時迅速從2.3遷移到SWIFT 3

我得到錯誤的didSelectRowAt indexPath:中IndexPath UITableView的

任務:我打了數據API和實現代碼如下其工作正常填充數據,但我想保存這一切是在swift2.3爲我工作在didSelectRowAtIndexPath方法數據

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    print("selected ") 
    //print(self.searchflightsandfares[indexPath.row] as SearchFlightsAndFares) 

    let data: NSData 
    // data = NSKeyedArchiver.archivedData(withRootObject: self.searchflightsandfares[indexPath.row].airlineCodeOneWay) 

    data = NSKeyedArchiver.archivedData(withRootObject: self.searchflightsandfares[indexPath.row]) as SearchFlightsAndFares 


    //Set Data 
    UserDefaults.standard.set(data, forKey: "selectedFlightDetailData") 

    SelectedFlightDetailsVC() 
} 

誤差 enter image description here

模型類是:

import UIKit 
import Foundation 

class SearchFlightsAndFares:NSObject{ 

    //segment data 
    var segmentaDataForDetailScreen:[NSDictionary] 
    var fareDataFromFlight:Dictionary<String, AnyObject> 

    //Flight Details -One Way 
    var airlineCodeOneWay:  String? //for list view 
    var airlineNameOneWay:  String? //for list view 
    var airlineCodeOneWaySegment:String? //for Detail view 
    var airlineNameOneWaySegment:String? //for Detail view 
….more code … 
init(fareDataFromFlight:   Dictionary<String, AnyObject>, 
     segmentaDataForDetailScreen: [NSDictionary], 
     airlineCodeOneWay:    String, //for list view 
     airlineNameOneWay:    String, //for list view 
     airlineCodeOneWaySegment:  String, //Flight Number one way 
     airlineNameOneWaySegment:  String, 

….more code … 
{ 


     self.fareDataFromFlight    = fareDataFromFlight 
     self.segmentaDataForDetailScreen = segmentaDataForDetailScreen 
     //One Way 
     self.airlineCodeOneWay    = airlineCodeOneWay 
     self.airlineNameOneWay    = airlineNameOneWay 
     self.airlineCodeOneWaySegment  = airlineCodeOneWaySegment 
} 

init(espDictionary: [String : AnyObject]) 
    { 

    logic for assignment from API to InIt Variables //….more code … 
} 

required init(coder aDecoder: NSCoder) { 
     self.fareDataFromFlight     = (aDecoder.decodeObject(forKey: "fareDataFromFlight") as? Dictionary<String, AnyObject>)! 
     self.segmentaDataForDetailScreen   = (aDecoder.decodeObject(forKey: "segmentaDataForDetailScreen") as? [NSDictionary])! 
     //One Way 
     self.airlineCodeOneWay   = aDecoder.decodeObject(forKey: "airlineCodeOneWay") as? String 
     self.airlineNameOneWay   = aDecoder.decodeObject(forKey: "airlineNameOneWay") as? String 
     self.airlineCodeOneWaySegment = aDecoder.decodeObject(forKey: "airlineCodeOneWaySegment") as? String 
     self.airlineNameOneWaySegment = aDecoder.decodeObject(forKey: "airlineNameOneWaySegment") as? String 

….more code … 

} 


func encodeWithCoder(aCoder: NSCoder) { 


     aCoder.encode(self.fareDataFromFlight,     forKey: "fareDataFromFlight") 
     aCoder.encode(self.segmentaDataForDetailScreen,   forKey: "segmentaDataForDetailScreen") 

     //One way 
     aCoder.encode(self.airlineCodeOneWay,   forKey: "airlineCodeOneWay") 
     aCoder.encode(self.airlineNameOneWay,   forKey: "airlineNameOneWay") 
     aCoder.encode(self.airlineCodeOneWaySegment, forKey: "airlineCodeOneWaySegment") 
     aCoder.encode(self.airlineNameOneWaySegment, forKey: "airlineNameOneWaySegment") 

….more code … 

} 
+0

加減速碼 –

回答

1

AAAAH最後我得到了它在SWIFT 3.0這個功能func encodeWithCoder(aCoder: NSCoder) {}改爲​​在Solution for this感謝您的時間得到了refrence和幫助陣列self.searchflightsandfares的@vadian

0

如果您searchflightsandfares數組類型是

let searchflightsandfares = [SearchFlightsAndFares]() 

,那麼你需要寫這個

data = NSKeyedArchiver.archivedData(withRootObject: searchflightsandfares[indexPath.row]) as NSData 

希望它會幫助你

+0

我有類對不起後,我沒有寫過'var searchflightsandfares = [SearchFlightsAndFares]()' – Sunil

1

不需要額外的聲明行。這不是Objective-C。評論一下。

// let data: Data 

數組中的項目應該是鑄造而不是歸檔對象。所以把右括號放到最後。

let data = NSKeyedArchiver.archivedData(withRootObject: self.searchflightsandfares[indexPath.row] as SearchFlightsAndFares) 

如果您的數據源陣列申報的具體雨燕([SearchFlightsAndFares])你不需要投什麼。

+0

我嘗試了很多方法,嘗試了@jignesh建議的方式,所有這些代碼都在swift 2.3上工作我不知道爲什麼它不在這裏工作,我是如果我用你的代碼'[projectName.SearchFlightsAndFares encodeWithCoder:]替換它:無法識別的選擇器發送到實例0x7f9f20033800' – Sunil

+0

你應該添加'NSCo在自定義類中採用。 – vadian

+0

已在nsobject類中具有'必需的init(編碼器aDecoder:NSCoder)'和'func encodeWithCoder(aCoder:NSCoder)'。是你問我做什麼.....我不知道哪些自定義類我必須做這個除此之外我只有一個其他類,即'SearchFlightsAndFaresCellTableViewCell:UITableViewCell'與'var searchFlightsAndFares:SearchFlightsAndFares! {0}更新來自模型類的數據,即SearchFlightsAndFares – Sunil