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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

2回答

6143閲覧

【Swift】FireStoreの機能を使用すると、"Invalid document reference.."のエラー

nekokichi

総合スコア54

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2019/02/18 06:32

編集2019/02/18 08:05

アプリ起動時にFireStoreからデータを取得する処理を実装したいのですが、AppDelegateやホーム画面で実装すると下記のエラーが発生します。

また、FireStoreにデータを保存する際にも、ちゃんとデータは用意されているのに必ず失敗します。

エラーメッセージのreasonを見ると、
「ドキュメントリファレンスがない」
のようですが、FireStore.firestore()を宣言しただけではダメなのでしょうか?

Databaseを使っていたので、FireStoreの扱いには不慣れで対処法がわかりません。

どうか、ご回答よろしくお願いします。

AppDelegate

1import UIKit 2import Firebase 3import FirebaseUI 4 5@UIApplicationMain 6class AppDelegate: UIResponder, UIApplicationDelegate { 7 8 var window: UIWindow? 9 10 override init() { 11 FirebaseApp.configure() 12 let db = Firestore.firestore() 13 //FireStore関連のメソッドがあるクラスのインスタンス 14 let readD = readData() 15 //ユーザーデータを取得 16 readD.readMyData() ←この行を通った時にエラーが発生 17 }

error

12019-02-18 15:20:41.449168+0900 BookShare[32939:1614032] - <AppMeasurement>[I-ACS036002] Analytics screen reporting is enabled. 2Call +[FIRAnalytics setScreenName:setScreenClass:] to set the screen name or override the default screen class name. 3To disable screen reporting, set the flag FirebaseScreenReportingEnabled to NO (boolean) in the Info.plist 4 52019-02-18 15:20:41.500977+0900 BookShare[32939:1613832] libMobileGestalt MobileGestalt.c:890: 6MGIsDeviceOneOfType is not supported on this platform. 7 82019-02-18 15:20:43.673305+0900 BookShare[32939:1614032] 5.16.0 - [Firebase/Analytics][I-ACS023007] 9 Analytics v.50500000 started 10 112019-02-18 15:20:49.575354+0900 BookShare[32939:1614032] 5.16.0 - [Firebase/Analytics][I-ACS023008] 12To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see http://goo.gl/RfcP7r) 13 142019-02-18 15:20:50.522672+0900 BookShare[32939:1613832] *** Terminating app due to uncaught exception 'FIRInvalidArgumentException', 15reason: 'Invalid document reference. 16Document references must have an even number of segments, but User has 1' 17 18*** First throw call stack: 19( 20 0 CoreFoundation 0x0000000111ad41bb __exceptionPreprocess + 331 21 1 libobjc.A.dylib 0x0000000111072735 objc_exception_throw + 48 22 2 BookShare 0x000000010dfe349c +[FIRDocumentReference(Internal) referenceWithPath:firestore:] + 476 23 3 BookShare 0x000000010dfdbb32 -[FIRCollectionReference documentWithPath:] + 450 24 4 BookShare 0x000000010de2c9a7 $S9BookShare8readDataC0c2MyD0yyF + 263 25 5 BookShare 0x000000010de459d7 $S9BookShare11AppDelegateCACycfc + 215 26 6 BookShare 0x000000010de45a63 $S9BookShare11AppDelegateCACycfcTo + 19 27 7 UIKitCore 0x00000001161fae5f _UIApplicationMainPreparations + 1526 28 8 UIKitCore 0x00000001161fa7ed UIApplicationMain + 92 29 9 BookShare 0x000000010de47097 main + 71 30 10 libdyld.dylib 0x000000011379e575 start + 1 31)

ViewController

1 //FireStoreに保存 2 for i in 0...4 { 3 db.collection("Item").document(randomCharacters).setData(items[i], completion: { (err) in 4 //[[String:String]]型の変数から[String:String]型の要素を1つずつ保存 5 print(self.items[i]) 6 if err != nil { 7 print("success") 8 } else { 9 print("fail") 10 } 11 }) 12 }

FIreStoreに保存する時のコンソール画面

1["DeliveryBurden": "着払い(受取人)", "UserID": "", 2 "Title": ";‘\l", "DeliveryDay": "7~8日", 3 "Good": "0", "UserName": "", "Date": "2019/02/18 15:25:34", 4 "DeliveryWay": "ゆうパック", "State": "ボロボロ", 5 "ItemID": "O9uerVzq8", "Category": "科学", "Status": "display"] 6fail 7["?": "?"] 8fail 9["?": "?"] 10fail 11["?": "?"] 12fail 13["?": "?"] 14fail

※追記

これのことでしょうか? 今の所心当たりがありません。

イメージ説明

以下がデータを読み込む関数ですが、階層の指定に問題があるのでしょうか?

Swift

1func readMyData() { 2 //データ取得開始 3 db.collection("User").document(userDataClass.userID).getDocument() { (snapdata, err) in 4 //エラー処理 5 if let err = err { 6 print("Error getting documents: (err)") 7 } else { 8 //データを順に取り出していく 9 for key in snapdata!.data()!.keys.sorted() { 10 //該当する値を対応する値に代入していく 11 switch key { 12 case "UserName": 13 self.userDataClass.userName = snapdata![key]! as! String 14 case "UserID": 15 self.userDataClass.userID = snapdata![key]! as! String 16 case "Follow": 17 self.userDataClass.follow = snapdata![key]! as! String 18 case "Follower": 19 self.userDataClass.follower = snapdata![key]! as! String 20 case "Good": 21 self.userDataClass.good = snapdata![key]! as! String 22 case "Share": 23 self.userDataClass.share = snapdata![key]! as! String 24 case "Get": 25 self.userDataClass.get = snapdata![key]! as! String 26 case "Profile": 27 self.userDataClass.profile = snapdata![key]! as! String 28 default: 29 break 30 } 31 } 32 } 33 } 34 }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

db.collection("User").document(userDataClass.userID).getDocument()

db.collection("User").getDocument()

投稿2019/02/18 11:36

nekokichi

総合スコア54

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

'Invalid document reference.

Document references must have an even number of segments, but User has 1'

偶数じゃないとダメなのに1になってる的なことを指摘されていますが心当たりは無いでしょうか。

投稿2019/02/18 06:37

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2019/02/18 08:12

コードじゃなくてdb側の構成がおかしいんじゃないの? firebase知らないので私には分からないけど。 エラーメッセージをちゃんと読もうよ、って趣旨の回答です。
nekokichi

2019/02/18 08:35

db.collection("User").document(userDataClass.userID).getDocument() を db.collection("User").getDocument() に書き換えたらうまく行きました。 データ読み込みの構成自体が間違っていたようです。
fuzzball

2019/02/18 08:43

自己解決にしたほうがいいと思うけど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問