2017-06-22 4 views
0

ソーシャルネットワーキングアプリを作っています。ユーザーが新しい投稿を作成したときに、彼らの投稿への写真は任意ですが、キャプションが必要です。アプリを作るときは、写真をオプションにしたいのですが、新しい投稿を作成するときにキャプションが必要です。

私はSwift 3とXcode 8.2.1を使用しています。また、Google Firebaseをサービスとしてのモバイルバックエンド(MBAAS)として使用しています。

以下

が私のコードです:

import UIKit 
import FirebaseStorage 
import Firebase 
import FirebaseDatabase 

class NewPostViewController: UIViewController { 
    @IBOutlet weak var photo: UIImageView! 
    @IBOutlet weak var caption: UITextView! 
    @IBOutlet weak var postButton: UIButton! 

var selectedImage: UIImage? 



override func viewDidLoad() { 
    super.viewDidLoad() 

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleSelectPhoto)) 
    photo.addGestureRecognizer(tapGesture) 
    photo.isUserInteractionEnabled = true 

} 

func handleSelectPhoto() { 
    let pickerController = UIImagePickerController() 
    pickerController.delegate = self 
    present(pickerController, animated: true, completion: nil) 
} 

@IBAction func postButton(_ sender: Any) { 
    ProgressHUD.show("Loading...", interaction: false) 
    if let postImage = self.selectedImage, let imageData = UIImageJPEGRepresentation(postImage, 0.1) { 
     let photoID = NSUUID().uuidString 
     let storageRef = Storage.storage().reference(forURL: "gs://bruh-b7907.appspot.com/").child("post_photos").child(photoID) 
     storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in 
      if error != nil { 
       ProgressHUD.showError("Could not post") 
       return 
      } 

      let postImageUrl = metadata?.downloadURL()?.absoluteString 
      self.sendDataToDatabase(photoUrl: postImageUrl!) 

     }) 
    } 

} 

func sendDataToDatabase(photoUrl: String) { 
    let ref = Database.database().reference() 
    let postsReference = ref.child("posts") 
    let newPostId = postsReference.childByAutoId().key 
    let newPostReference = postsReference.child(newPostId) 
    newPostReference.setValue(["postPhotoUrl": photoUrl, "caption": caption.text!], withCompletionBlock: { 
     (error,ref) in 
     if error != nil { 
      ProgressHUD.showError("Could not post") 
      return 
     } 
     ProgressHUD.showSuccess("Successfully Posted") 
    }) 
} 

} 
extension NewPostViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     if let image = info["UIImagePickerControllerOriginalImage"] as? UIImage{ 
      selectedImage = image 
      photo.image = image 
     } 
     dismiss(animated: true, completion: nil) 
    } 
} 
+0

をチェックするためにガード文を追加します。あなたは彼らが写真やたびに投稿するとき、キャプションが必要な意味ですか? –

+0

写真があるかどうかにかかわらずキャプションが必要です –

答えて

0

はあなたcaption.text

@IBAction func postButton(_ sender: Any) { 
    ProgressHUD.show("Loading...", interaction: false) 
    if let postImage = self.selectedImage, let imageData = UIImageJPEGRepresentation(postImage, 0.1) { 
     let photoID = NSUUID().uuidString 
     let storageRef = Storage.storage().reference(forURL: "gs://bruh-b7907.appspot.com/").child("post_photos").child(photoID) 
     storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in 
      if error != nil { 
       ProgressHUD.showError("Could not post") 
       return 
      } 

      // if there's no any text in your UITextView it'll return 
      guard let requiredCaption = caption.text else { 
       print("No caption to submit") 
       return 
      } 

      let postImageUrl = metadata?.downloadURL()?.absoluteString 
      self.sendDataToDatabase(photoUrl: postImageUrl!) 

     }) 
    } 

} 
関連する問題