2016-11-06 2 views
1

Vous essayez de suivre le didacticiel Apple FoodTracker. xCode 8.1. Je reçois ce crashlog:La clé NSPhotoLibraryUsageDescription a été ajoutée à info.plist, se bloque toujours en raison de données confidentielles sensibles

2016-11-06 16:49:17.922832 FoodTracker[2307:660318] [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data. 

(LLDB)

J'ai lu plusieurs messages sur les disparus clés de confidentialité dans iOS 10, et donc j'ajouté la clé nécessaire ...

Confidentialité - Photothèque Utilisation Description

... et un message personnalisé sous la colonne de valeur. Pourtant, je reçois toujours le même accident quand je tape sur l'image. Toute aide est la bienvenue. J'aimerais finir ce tutoriel.

Merci!

INFO:

Je ne peux pas inclure une capture d'écran de mon info.plist encore, alors voici le lien vers une capture d'écran:

screenshot of info.plist

Voici mon ViewController.swift juste au cas où:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

// MARK: Properties 

@IBOutlet weak var nameTextField: UITextField! 
@IBOutlet weak var mealNameLabel: UILabel! 
@IBOutlet weak var photoImageView: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    nameTextField.delegate = self 
} 

// MARK: UITextFieldDelegate 
func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

    // Hide the keyboard 
    textField.resignFirstResponder() 

    return true 
} 

func textFieldDidEndEditing(_ textField: UITextField) { 

    mealNameLabel.text = textField.text 
} 

// MARK: UIImageControllerDelegate 
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 

    dismiss(animated: true, completion: (nil)) 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
    photoImageView.image = selectedImage 
    dismiss(animated: true, completion: (nil)) 
} 

// MARK: Actions 
@IBAction func selectImageFromPhotoLibrary(_ sender: UITapGestureRecognizer) { 

    nameTextField.resignFirstResponder() 
    let imagePickerController = UIImagePickerController() 
    imagePickerController.sourceType = .photoLibrary 
    imagePickerController.delegate = self 
    present(imagePickerController, animated: true, completion: nil) 
} 

@IBAction func setDefaultLabelText(_ sender: UIButton) { 

    mealNameLabel.text = "Default Text" 
} 
} 
+0

Je suis en train de faire aussi le tutoriel et je suis à la section avec le sélecteur d'image. Tout fonctionne pour moi après avoir ajouté la clé de confidentialité. Peut-être qu'il va vous aider https://github.com/ronatory/food-tracker – ronatory

Répondre

0

Vous devrez peut-être vous assurer que votre application a été autorisée. Bien que vous ayez peut-être ajouté la chaîne info.plist maintenant, puisque vous avez déjà exécuté l'application sur votre appareil, il se peut que l'erreur persiste. Je suggère de faire un nettoyage. Supprimer vos données dérivées "raccourci" Command + Option + Sift + k et supprimez l'application de l'appareil et de construire/exécuter à nouveau. Si cela ne résout pas le problème, vous devriez vérifier si vous avez réellement la capacité d'utiliser cette source. Parce que si vous êtes sur un simulateur, vous n'avez pas réellement une caméra comme vous le faites sur un vrai périphérique. Cela provoquerait un crash. Si cela ne le résout pas, vous pouvez simplement vérifier les autorisations pour ce type de média.

let status = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo) 
    if status == AVAuthorizationStatus.denied { 
let changeYourSettingsAlert = UIAlertController(title: "You do not have permissions enabled for this.", message: "Would you like to change them in settings?", preferredStyle: .alert) 
    let okAction = UIAlertAction(title: "OK", style: .default, handler: { (UIAlertAction) -> Void in 
    guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return} 
    UIApplication.shared.openURL(url) 
    }) 
    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)   
     changeYourSettingsAlert.addAction(okAction) 
     changeYourSettingsAlert.addAction(cancelAction) 
     presentAlert(sender: changeYourSettingsAlert) 
} 

L'autre moitié est de savoir comment leur donner une possibilité d'ouvrir Settings pour l'utilisateur.

J'espère que la bonne chance aide

+0

Ce n'est que partiellement correct. Vous devez demander une autorisation si le statut actuel est "NotDetermined". – rmaddy

+0

Merci pour l'aide. J'ai essayé de le nettoyer et de le construire. Désinstallé aussi bien. Même comportement sur mes deux Mac avec de vrais appareils et le simulateur. J'ai même juste téléchargé le projet Apple tel qu'il est dans la leçon. Me rend fou... – user1269290

0

Il y a un total de 3 fichiers Info.plist dans le cadre du projet FoodTracker. Assurez-vous de modifier celui qui se trouve dans le dossier 'FoodTracker'. Assurez-vous également que la propriété n'est pas mise en cascade sous une propriété de tableau existante.