iOS - ALAssetsLibrary 使用的缓存数据未更新
Posted
技术标签:
【中文标题】iOS - ALAssetsLibrary 使用的缓存数据未更新【英文标题】:iOS - Cached data used by ALAssetsLibrary is not updated 【发布时间】:2012-03-27 10:10:46 【问题描述】:在 iPhone 上测试我的应用时,我似乎遇到了 ALAssetLibrary 的缓存问题。
产生此问题的步骤
-
使用 iPhone 相机拍照
使用 ALAssetsLibrary(通过 ELCImagePicker)访问相机胶卷
问题是当ELCImagePicker显示相册列表时,在步骤1中拍摄的照片的缩略图显示为相机胶卷相册(这是正确的),但是当我进入相机胶卷相册时,那张照片是不在那里。控制台日志中也会显示这样的错误:
Cached count is off for 0x2391d0 <x-coredata://D226A7C3-95D5-40B3-BCFB-726E534AB57A/Album/p1> (1357 != 1358) moc=<PLManagedObjectContext: 0x63794c0>
1357 和 1358 似乎与我拍照前后的照片数量相匹配,关闭图像选择器并再次打开它并没有帮助。但是如果我切换到照片应用程序,照片就会显示在那里。当我返回我的应用程序时,现在也会显示照片。
我都试过了
UIImageWriteToSavedPhotosAlbum ( UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo );
和 ALAssetsLibrary 的
(void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef orientation:(ALAssetOrientation)orientation completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
但两者都不起作用。任何帮助是极大的赞赏。谢谢!
【问题讨论】:
【参考方案1】:您可以收听ALAssetsLibraryChangedNotification
通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadAlbumGroups) name:ALAssetsLibraryChangedNotification object:nil];
在reloadAlubmGroups
中,从资产库中加载您的专辑组以获取更新的对象。
苹果文档:
ALAssetsLibraryChangedNotification
当资产库的内容从使用数据的应用下发生更改时发送。 当您收到此通知时,您应该丢弃所有缓存信息并再次查询资产库。在处理完通知后,您应该认为您引用的任何
ALAsset
、ALAssetsGroup
或ALAssetRepresentation
对象均无效。在 ios v4.0 中,通知的对象为 nil。在 iOS v4.1 及更高版本中,通知对象是发布通知的库对象。
【讨论】:
不完全是最好的用户体验,但我想这是必须的,因为可用的选项不多。以上是关于iOS - ALAssetsLibrary 使用的缓存数据未更新的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ALAssetsLibrary 访问照片而不在 iOS5 中请求位置访问?
ALAssetsLibrary addAssetsGroupAlbumWithName 不适用于 iOS 9
如何在后台接收 iOS 4 中的 ALAssetsLibrary 更改通知
Xamarin iOS ALAssetsLibrary WriteVideoToSavedPhotosAlbum 不保存到库