2017-02-07 4 views
0

Aus irgendeinem Grund wird dieser Code nicht an Firebase gesendet. Ich habe verschiedene Varianten ausprobiert, aber nichts wird gepostet.Xcode Swift 3 Daten werden nicht an Firebase gesendet

Immer wenn ich diesen Code ausführen, die Ausgabe in der Konsole ist,

2017-02-07 11: 42: 14,378 NeedAMovie [3394] [Firebase/Datenbank] [I-RDB03812] setValue : oder removeValue: um /filme/-KcP5FyUnpM9drNz3vsd fehlgeschlagen: permission_denied.

Dataservice-Klasse:

import Foundation 
import Firebase 

let URL_BASE = FIRDatabase.database().reference() 

class DataSevice { 

    static let ds = DataSevice() 

    private var _REF_BASE = URL_BASE 
    private var _REF_POSTS = URL_BASE.child("movies") 

    var REF_BASE: FIRDatabaseReference{ 
     return _REF_BASE 
    } 

    var REF_POSTS: FIRDatabaseReference{ 
     return _REF_POSTS 
    } 

} 

Teil, wo ich Code schreiben:

@IBAction func postBtn(_ sender: Any) { 

    if(self.caption.text != ""){ 
     vars.caption = self.caption.text 
    } 

    if let img = imgView.image, imageSelected { 
     let urlStr = "https://post.imageshack.us/upload_api.php" 
     let url = URL(string: urlStr)! 
     let imgData = UIImageJPEGRepresentation(img, 0.2)! 
     let keyData = "AEHKLRSU485b1b4e7ca86c9fdcede4064b55d66b".data(using: .utf8)! // key removed for sake of privacy 
     let keyJSON = "json".data(using: .utf8)! 

     Alamofire.upload(multipartFormData: { multipartFormData in 
      multipartFormData.append(imgData, withName: "fileupload", fileName:"image", mimeType: "image/jpg") 
      multipartFormData.append(keyData, withName: "key") 
      multipartFormData.append(keyJSON, withName: "format") 
     }, to: url, encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 
       upload.responseJSON { response in 
        if let info = response.result.value as? [String: AnyObject], 
         let links = info["links"] as? [String: AnyObject], 
         let imgLink = links["image_link"] as? String { 
         self.postToFirebase(imgLink) 
        } 
       } 
      case.failure(_): break 
      } 
     }) 
    } 
    else{ 
     self.makeAlert("Missing Fields", msg: "In order to post you must include a Picture and a Caption") 
    } 
} 

func postToFirebase(_ imgUrl: String?){ 

    if let description = self.caption.text , description != "" { 

     if let title = self.movieTitle.text , title != ""{ 

      let post: Dictionary<String, AnyObject> = [ 
       "title": title as AnyObject, 
       "caption": description as AnyObject, 
       "category": vars.category as AnyObject, 
       "imageURL": imgUrl! as AnyObject 
      ] 

      print(post) 
      //over here add this post to the users post array 

      var fpost = DataSevice.ds.REF_BASE.child("movies").childByAutoId() 

      fpost.setValue(post) 

      self.movieTitle.text = "" 
      self.caption.text = "" 
      self.imgView.image = UIImage(named: "") 
      self.imageSelected = false 
     } 

    } 
    else{ 
     print("didnt work") 
    } 

} 

Die postToFirebase Methode ist, wo der Ist-Buchung gemacht wird. Vielen Dank.

Antwort

2

Ihr Code ist korrekt. Das Problem besteht in der Berechtigung für die Firebase-Datenbank. Ihre Datenbank darf nicht posten. Gehen Sie zur Firebase-Konsole. Wählen Sie auf der linken Seite die Schaltfläche Datenbank. Auf der rechten Seite sehen Sie Daten, Regeln, Verwendung, Backups. Wählen Sie Regeln und ändern Sie die Werte in:

{ 
    "rules": { 
    ".read": "true", 
    ".write": "true" 
    } 
} 
+0

Vielen Dank! –

+0

Hi @ShaanLuthra Markieren Sie dies als akzeptierte Antwort. :) –

Verwandte Themen