2016-11-08 6 views
1

私はswift2.3をswift3に変換しようとしています。私が得た次のコードで、intValueエラーであいまいな使い方をしています。intValueのあいまいな使用Swift3

jobPackageVersion.intJobPackageId =(ANYOBJECTとしてJobPackageVersionDictionary [ "intJobPackageId"]!)のNSNumberとして.intValue

ここでは完全なコード

if let url = Bundle.main.url(forResource: "tblJobPackageVersion", withExtension: "csv") { 
    do { 
    let strData = try String(contentsOf: url) 
    let csv = CSwiftV(String: strData) 

    if csv.keyedRows != nil { 
     for dictionary in csv.keyedRows! { // [Dictionary<String, String>] 
     let JobPackageVersionDictionary = dictionary as NSDictionary // Cast to NSDictionary 
     let JobPackageVersionEntity = NSEntityDescription.entity(forEntityName: "JobPackageVersion", in: context) 
     let jobPackageVersion = JobPackageVersion(entity: JobPackageVersionEntity!, insertInto: context) 

     // Set object attributes 
     jobPackageVersion.intJobPackageId = (JobPackageVersionDictionary["intJobPackageId"]! as AnyObject).intValue as NSNumber 
     jobPackageVersion.intJobPackageVersionId = (JobPackageVersionDictionary["intJobPackageVersionId"]! as AnyObject).intValue as NSNumber 
     jobPackageVersion.intStatus = (JobPackageVersionDictionary["intStatus"]! as AnyObject).intValue as NSNumber 
     jobPackageVersion.intVersion = (JobPackageVersionDictionary["intVersion"]! as AnyObject).intValue as NSNumber 

     do { // Save object to database and clean up memory 
      try context.save() 
      context.refresh(jobPackageVersion, mergeChanges: false) 
     } catch let error as NSError { Logger.sharedInstance.logMessage("\(#function) JobPackageVersion Saving Error: \(error.userInfo)") } 
     } // for-loop 

     Logger.sharedInstance.logMessage("\(#function): Loaded \(csv.keyedRows!.count) tblJobPackageVersion records.") 
    } else { Logger.sharedInstance.logMessage("\(#function) CSV Parser Warning: no CSV data was parsed in tblJobPackageVersion.csv!") } 
    } catch { Logger.sharedInstance.logMessage("\(#function) Error reading contents of tblJobPackageVersion.csv.") } 
} else { Logger.sharedInstance.logMessage("\(#function) Error locating URL for resource tblJobPackageVersion.csv") } 
} 

任意の助けをいただければ幸いです。

ありがとうございました。

答えて

2

AnyObjectのオブジェクトにintValueを呼び出そうとしています。エラーの状態は、NSNumberNSStringの両方にintValueというプロパティがあるため、あまりにもあいまいです。 とNSStringの両方がAnyObjectの傘の下にあるので、XcodeはintValueを使用するかどうかわかりません。 Xcodeは混乱しているので、オブジェクトの種類についてより具体的に説明する必要があります。あなたはおそらくあなたがintValue呼び出す他のオブジェクトと同じエラーを取得するつもりだが、あなたはそれに応じてそれらを修正することができます

jobPackageVersion.intJobPackageId = (JobPackageVersionDictionary["intJobPackageId"]! as NSNumber).intValue 

注1:このような何かを試してみてください。

注2:!を使用してオブジェクトのアンラップに力を入れてください。あなたが使っている辞書がnilを返しても、あなたのプログラムはクラッシュします。代わりに、あなたの使用事例に応じて、if letまたはguardのいずれかのステートメントを使用して、安全にそれらをアンラッピングします。このような何かが少し良く動作することがあります。

guard let intJobPackageId = JobPackageVersionDictionary["intJobPackageId"] as? NSNumber, 
     let intJobPackageVersionId = JobPackageVersionDictionary["intJobPackageVersionId"] as? NSNumber, 
     let intStatus = JobPackageVersionDictionary["intStatus"] as? NSNumber, 
     let intVersion = JobPackageVersionDictionary["intVersion"] as? NSNumber 
else { 
    print("one of the dictionary values is nil") 
    return 
} 

jobPackageVersion.intJobPackageId = intJobPackageId.intValue 
jobPackageVersion.intJobPackageVersionId = intJobPackageVersionId.intValue 
jobPackageVersion.intStatus = intStatus.intValue 
jobPackageVersion.intVersion = intVersion.intValue 

これは正確に何をしたいではないかもしれないが、それは、あなたのアプリがクラッシュしないように、安全に、あなたのオブジェクトをアンラップする方法についてのアイデアを与える必要があります。あなたはそれで遊んで、あなたのために何が最善であるかを決めることができます。

関連する問題