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

当资产库的内容从使用数据的应用下发生更改时发送。 当您收到此通知时,您应该丢弃所有缓存信息并再次查询资产库。在处理完通知后,您应该认为您引用的任何 ALAssetALAssetsGroupALAssetRepresentation 对象均无效。

ios v4.0 中,通知的对象为 nil。在 iOS v4.1 及更高版本中,通知对象是发布通知的库对象。

【讨论】:

不完全是最好的用户体验,但我想这是必须的,因为可用的选项不多。

以上是关于iOS - ALAssetsLibrary 使用的缓存数据未更新的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ALAssetsLibrary 访问照片而不在 iOS5 中请求位置访问?

ALAssetsLibrary addAssetsGroupAlbumWithName 不适用于 iOS 9

如何在后台接收 iOS 4 中的 ALAssetsLibrary 更改通知

Xamarin iOS ALAssetsLibrary WriteVideoToSavedPhotosAlbum 不保存到库

使用 iOS ALAssetsLibrary 更新/删除照片?

ALAssetsLibrary aspect Ratio Thumbnail iOS 4