アプリ起動時に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 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。