iOS - ALAssetsLibrary使用的缓存数据未更新

时间:2012-03-27 10:10:47

标签: iphone ios alassetslibrary

在iPhone上测试我的应用时,我似乎遇到了ALAssetLibrary的缓存问题。

用于产生此问题的步骤

  1. 使用iPhone相机拍照
  2. 使用ALAssetsLibrary(通过ELCImagePicker
  3. 访问相机胶卷

    问题在于,当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 个答案:

答案 0 :(得分:0)

您可以收听ALAssetsLibraryChangedNotification通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadAlbumGroups) name:ALAssetsLibraryChangedNotification object:nil];

reloadAlubmGroups中从资源库加载相册组以获取更新的对象。


Apple文档:

  

<强> ALAssetsLibraryChangedNotification

     

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

     

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