web-dev-qa-db-fra.com

l'application iOS 10 se bloque lorsque vous essayez d'identifier une image dans une bibliothèque de photos

J'essaie de sauvegarder une image dans la photothèque de Swift 3 (je travaille avec Xcode 8).

Code ViewController:

func shareImage(image: UIImage) {
    let items = [image]

    var activityVC: UIActivityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
    let excludeActivities: [UIActivityType] = [UIActivityType.airDrop,
                                               UIActivityType.assignToContact,
                                               UIActivityType.addToReadingList,
                                               UIActivityType.copyToPasteboard]

    activityVC.excludedActivityTypes = excludeActivities

    self.present(activityVC, animated: true, completion: nil)
}

Lorsque je lance l'application et que je clique sur le bouton pour prendre la capture d'écran (en la convertissant en image, ..., tout fonctionne parfaitement), l'application demande l'autorisation d'accéder à la photothèque, je clique sur le bouton "OK" et puis l'application se bloque. L'image n'est pas enregistrée dans la photothèque.

Le seul indice que je reçois de Xcode est le suivant:

2016-09-28 11:24:27.216043 Ajax Kids[4143:1545362] [error] error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///var/mobile/Media/PhotoData/Photos.sqlite?readonly_shm=1 options:{
NSPersistentStoreFileProtectionKey = NSFileProtectionCompleteUntilFirstUserAuthentication;
NSReadOnlyPersistentStoreOption = 1;
NSSQLitePersistWALOption = 1;
NSSQLitePragmasOption =     {
    "journal_mode" = WAL;
};
} ... returned error Error Domain=NSCocoaErrorDomain Code=256 "The file couldn’t be opened." UserInfo={reason=Failed to access file: 1} with userInfo dictionary {
reason = "Failed to access file: 1";
}
2016-09-28 11:24:27.216433 Ajax Kids[4143:1545362] [Migration] Unexpected error opening persistent store <private>, cannot attempt migration <private>)
2016-09-28 11:24:27.216568 Ajax Kids[4143:1545362] [Migration] Failed to open store <private>.  Requires update via assetsd (256: <private>)

Quelqu'un at-il une idée de comment résoudre ce problème?

Merci d'avance! 

METTRE &AGRAVE; JOUR

Le partage de l'image sur les médias sociaux fonctionne bien. Le problème est donc de pouvoir enregistrer l'image dans la photothèque.

16
Charlotte1993

Ajoutez de nouveaux enregistrements dans votre nouveau fichier InfoPlist.strings.

<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME)</string>

UPD: Clé iOS 11

38
Andrey Oshev

Sur iOS 11, il existe une nouvelle propriété appelée NSPhotoLibraryAddUsageDescription, similaire à NSPhotoLibraryUsageDescription. Voir https://developer.Apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

12
Tiois

Essayez de forcer les autorisations de requête comme ceci:

PHPhotoLibrary.requestAuthorization { status in
  if status == .authorized {
    //do things
  }
}

n'oubliez pas import Photos. J'espère que cela t'aides.

1
Andrey M.

J'ai trouvé le coupable dans mon cas particulier. Nous utilisons Leanplum pour les analyses et les notifications Push. La méthode Leanplum.syncResourcesAsync provoquait le blocage de l'ouverture de la photothèque. Il m'a fallu quelques jours pour trouver, car je ne savais pas que Leanplum faisait quelque chose pour se connecter à la photothèque d'un utilisateur ... ce qui est en soi préoccupant.

Nous n'utilisions pas les fonctionnalités apportées par cette méthode particulière. Nous avons donc pu supprimer l'appel de la méthode et la photothèque a cessé de planter.

0
SeanR