2016-12-20 15 views
1

Swiftで新しいエラー処理を使用する方法に関する質問があります。Swift 3のエラー処理と可変アクセシビリティ

私はデータオブジェクトにファイルの内容を読んでいる:

var overallData: Data? 

//load file contents into data object 
let dataFileURL = NSURL(string: fileName) 

do { 
    overallData = try Data(contentsOf: dataFileURL as! URL) 
} catch { 
    print("\(error)") 
} 

問題は、私はいつもこのエラーメッセージに遭遇することです:

fatal error: unexpectedly found nil while unwrapping an Optional value

問題はoverallDataオブジェクトがあるということですnilと設定します。私は後でDO-キャッチ、

let dataFileURL = NSURL(string: fileName) 

do { 
    overallData = try Data(contentsOf: dataFileURL as! URL) 
} catch { 
    print("\(error)") 
} 

外のデータ変数を定義しない場合、システムはそれがまだ定義されていない変数の私に言って続けるので、しかし、私はoverallDataオブジェクトを使用することはできません。したがって、do-catchループで定義された新しい変数はループ内でのみローカルにアクセスできるように見えます。

この問題の解決方法をご存知ですか?私は他の場所でoverallDataオブジェクトを使用する必要があります。

+0

[a init(fileURLWithPath:) '](https://developer.apple.com/reference/foundation/url/1780183-init) 'NSURL'ではなく' URL'です。 (b)はファイルURLです。 – Rob

答えて

1

次の答えはあなたの誤差がラインである前提としています

overallData = try Data(contentsOf: dataFileURL as! URL) 

あなたが別の行に「致命的なエラー」を取得している場合は、あなたの質問を更新してください。


エラーはdo/catch/tryとは関係ありません。

dataFileURLの力のアンラッピングは、nilです。有効なURLではありませんnilfileNameので、これは戻っている

let dataFileURL = NSURL(string: fileName) 

あなたの問題は、このラインです。 fileNameを想定し

は、あなたがする必要がある、ローカルファイルへのパスです:

let dataFileURL = URL(fileURLWithPath: fileName) 

URL代わりにNSURLの使用に注意してください。 Swift 3にNSURLを使用することには意味がありません。

+0

こんにちは、あなたは絶対に正しいです、それはdataFileURLがnilである問題です。この問題が解決されると、物事はスムーズに機能します。ありがとうございました! – PaulLian

関連する問題