当试图将图像保存到照片库时,iOS 10应用程序崩溃

问题描述:

我试图将图像保存到Swift 3(我正在使用Xcode 8)中的照片库。当试图将图像保存到照片库时,iOS 10应用程序崩溃

视图控制器代码:

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>) 

没有人有任何想法如何解决这一问题?

在此先感谢!

UPDATE

分享社会媒体上的图像正常工作,所以这个问题被指定为在照片库中保存图像。

+0

当您尝试保存图像时共享代码 –

+0

@OlegGordiichuk这就是我写的共享/保存图像的所有代码。例如,操作系统负责保存代码或在Facebook上发布图像。这是你不需要用UIAcrtivityViewController编写的代码。 – Charlotte1993

+0

你应该添加权限在辫子文件 –

在新的InfoPlist.strings文件中添加新记录。

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

UPD: iOS的11个重点

+0

我已经将此密钥添加到了我的info.plist文件中。 – Charlotte1993

+1

这是完美的安德烈,很棒。谢谢 – Simon

+0

在iOS 11上,您必须添加一个新属性才能保存图像。请参阅下面的答案。 – Tiois

我发现在我的具体情况的罪魁祸首。我们正在使用Leanplum进行分析和推送通知。 Leanplum.syncResourcesAsync方法导致照片库的打开崩溃。花了几天的时间才发现,因为我不知道Leanplum正在做任何事情来挂钩用户的照片库......这本身就是关系。

我们没有使用这种特殊方法带来的功能,所以只能删除方法调用,照片库停止崩溃。

试图迫使这样的请求的权限:

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

不要忘记import Photos。希望这可以帮助。

在iOS 11上,有一个名为NSPhotoLibraryAddUsageDescription的新属性,类似于NSPhotoLibraryUsageDescription。请参阅https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

+0

我已经添加了这两个键,但仍然无法正常工作 –

+0

您得到的错误是什么? – Tiois

+0

@Tiois我无法在照片库中保存照片。我没有收到任何错误。它显示“图像保存”。但在照片库照片不存在。 –