我正在尝试将图像保存到Swift 3中的照片库(我正在使用Xcode 8)。
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)
}
当我运行应用程序,然后单击按钮获取屏幕截图(将其转换为图像,...,这一切都完美无缺)时,应用程序要求访问照片库的权限,我点击“确定” “按钮,然后应用程序崩溃。图像未保存在照片库中。
我从Xcode获得的唯一线索如下:
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>)
有没有人知道如何解决这个问题?
提前致谢!
更新
在社交媒体上分享图像工作正常,因此指定了将图像保存在照片库中的问题。
答案 0 :(得分:42)
在新的InfoPlist.strings文件中添加新记录。
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME)</string>
UPD: iOS 11密钥
答案 1 :(得分:13)
在iOS 11上,有一个名为NSPhotoLibraryAddUsageDescription
的新属性,类似于NSPhotoLibraryUsageDescription
。见https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html
答案 2 :(得分:1)
尝试强制执行以下请求权限:
PHPhotoLibrary.requestAuthorization { status in
if status == .authorized {
//do things
}
}
不要忘记import Photos
。希望这会有所帮助。
答案 3 :(得分:0)
我在特定情况下找到了罪魁祸首。我们正在使用Leanplum进行分析和推送通知。 document.querySelector('#myInput').checked = false == 'false' ? false : true; // This set true
方法导致照片库的打开崩溃。我花了几天时间才发现,因为我不知道Leanplum正在做任何事情来挂钩用户的照片库......这本身就是关注的。
我们没有使用此特定方法带来的功能,因此只能删除方法调用并且照片库停止崩溃。