質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

解決済

swift3:出直し。"fatal error: unexpectedly found nil while unwrapping an Optional value"が出ます。

harima
harima

総合スコア17

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

1回答

-1評価

0クリップ

12746閲覧

投稿2017/05/04 05:29

編集2017/05/04 05:35

書籍を購入してリストを入力したのですが、エラーが発生して動作しません。
大変申し訳ありませんが、どこが悪いのかご教授願います。

swift3

// // ViewController.swift // ICloudDemo // import UIKit class ViewController: UIViewController{ // Documentに関する情報 struct USDocInfo { static let NAME = "usdoc_test" static let EXTENSION = "us" static var LOCAL_DOCUMENTS_PATH:String? = nil static var ICLOUD_CONTAINER_PATH:String? = nil } // アプリのサンドボックスのパスを格納する変数 var localDocumentsPath: String { if let dir = USDocInfo.LOCAL_DOCUMENTS_PATH { return dir } else { let dir = NSSearchPathForDirectoriesInDomains( .documentDirectory, .userDomainMask, true)[0] + "/" USDocInfo.LOCAL_DOCUMENTS_PATH = dir return dir } } var iCloudContainerPath: String? { return USDocInfo.ICLOUD_CONTAINER_PATH } var document: USDocument! var documentURL: URL { return document.fileURL } var isFileExists = false let query = NSMetadataQuery() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. query.searchScopes = [ NSMetadataQueryUbiquitousDocumentsScope, NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope] query.predicate = NSPredicate(format: "%K LIKE '*'", NSMetadataItemFSNameKey) DispatchQueue.global(qos: .default).async(execute: { if let url = FileManager.default.url(forUbiquityContainerIdentifier: nil) { print("iCloudコンテナのURL:\(url)") USDocInfo.ICLOUD_CONTAINER_PATH = url.path + "/Documents/" self.iCloudContainerDidInitialize() } }) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) NotificationCenter.default.addObserver(self, selector: #selector(ViewController.iCloudDocumentDidChange(_:)), name: NSNotification.Name.UIDocumentStateChanged, object: self.document) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIDocumentStateChanged, object: self.document) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func iCloudContainerDidInitialize() { let filePath = iCloudContainerPath! + USDocInfo.NAME + "." + USDocInfo.EXTENSION let fileUrl = URL(fileURLWithPath: filePath) createDocument(fileUrl) } func createDocument(_ fileUrl: URL?) { let localFilePath = localDocumentsPath + USDocInfo.NAME + "." + USDocInfo.EXTENSION let localFileUrl = URL(fileURLWithPath : localFilePath) let doc = USDocument(fileURL : localFileUrl) doc.place = "自宅" print("自宅") doc.save(to: localFileUrl, for: .forCreating, completionHandler: { (success:Bool) in // "fatal error: unexpectedly found nil while unwrapping an Optional value" print("pass") if success { print("Documentデータを保存しました。") } else { print("Documentデータを保存できませんでした。") } }) } func iCloudDocumentDidChange(_ notification: Notification) { if self.document.documentState.contains(.inConflict){ do{ try NSFileVersion.removeOtherVersionsOfItem(at: self.document.fileURL) } catch let error { print("エラー内容:\(error)") } if let conflicts = NSFileVersion.unresolvedConflictVersionsOfItem(at: self.document.fileURL){ for fileVersion in conflicts { fileVersion.isResolved = true } } } } }

もう一つのファイルです。

swift3

// // USDocument.swift // ICloudDemo // import UIKit class USDocument: UIDocument { // Static定数の宣言 struct USFileWrapperKeys { static let IMG = "USDocuemnt.img" static let PLACE = "USDocument.place" static let DATE = "USDocument.date" static let DETAIL = "USDocument.detail" } // 記録したい内容を保持するメンバ変数を宣言します var img:UIImage? var place:String? var date:Date? var detail:String? // 上記、Documentの内容をひとまとめにパッケージするNSFileWrapperもメンバ変数として宣言します var fileWrapper:FileWrapper? // MARK: - 書き込み用のメソッド override func contents(forType typeName: String) throws -> Any { if self.fileWrapper == nil { // 空のDictonaryを渡している self.fileWrapper = FileWrapper(directoryWithFileWrappers:[:]) } if let place = self.place , let data = place.data(using: String.Encoding.utf8) { let fw = FileWrapper(regularFileWithContents:data) fw.preferredFilename = USFileWrapperKeys.PLACE self.fileWrapper?.addFileWrapper(fw) } if let img = self.img , let data = UIImageJPEGRepresentation(img, 1.0) { let fw = FileWrapper(regularFileWithContents:data) fw.preferredFilename = USFileWrapperKeys.IMG self.fileWrapper?.addFileWrapper(fw) } if let date = self.date { let data = NSKeyedArchiver.archivedData(withRootObject: date) let fw = FileWrapper(regularFileWithContents:data) fw.preferredFilename = USFileWrapperKeys.DATE self.fileWrapper?.addFileWrapper(fw) } if let detail = self.detail , let data = detail.data(using: String.Encoding.utf8) { let fw = FileWrapper(regularFileWithContents:data) fw.preferredFilename = USFileWrapperKeys.DETAIL self.fileWrapper?.addFileWrapper(fw) } return self.fileWrapper as Any } }

iCloudの設定画面です

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

TakeoAsai

2017/05/04 05:35

具体的にどのようなエラーが出ているのでしょうか?
harima

2017/05/04 05:37

96行目で"fatal error: unexpectedly found nil while unwrapping an Optional value"エラーが発生します。
fuzzball

2017/05/08 05:29

「96行目」で回答する人が分かると思いますか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。