【问题标题】:iOS - How to handle iPhone's photos whether changed when app become active?iOS - 如何在应用程序激活时处理 iPhone 的照片是否发生变化?
【发布时间】:2017-03-30 08:51:05
【问题描述】:

我使用自定义UICollectionView 来显示 iPhone 的照片。我想在用户删除/修改/添加一张或多张照片后应用激活时重新加载UICollectionView

我将PHAsset 保存在一个数组中,[previousAssetsArray isEqual:currentAssetsArray] 不起作用。

有什么想法吗?

编辑:

What is the NSObject isEqual: and hash default function?

当我再次获取照片的资产时,它的地址发生了变化,所以previousAsset 将不等于currentAsset,即使它们属于照片。 [previousAsset isEqual: currentAsset] 总是NO

我还使用PHAsset 的属性hash 来检查照片是否更改。但是我发现当我刚刚在照片应用中修改(裁剪)一张照片时,它的哈希值没有改变。

【问题讨论】:

  • 您可以比较“previousAssetsArray”和“isEqual:currentAssetsArray”的计数值,而不是比较两个数组。
  • @HirenPatel 如果只是修改了一些照片,我会重新加载UICollectionView,比较计数值将不起作用。
  • 两个数组可以有不同的内存地址,所以你不能直接比较。您可能必须遍历数组以比较更改,或者您必须重新加载集合视图超时应用程序变为活动状态。
  • 不管它们是否相同,你为什么不重新加载自己?
  • @FahimParkar 因为当我重新加载它时,即使没有任何改变,重新加载UICollectionView 会导致一些动画。这不是一个好的体验。

标签: ios objective-c iphone


【解决方案1】:

试试这个[previousAssetsArray isEqualToArray:currentAssetsArray]

示例:: BOOL theyAreEqual = [myFirstArray isEqualToArray:mySecondArray];

如果你想比较两个数组的计数 previousAssetsArray.count == currentAssetsArray .count

【讨论】:

  • 看来PHAsset无法比较,甚至是同一张照片的PHAsset。所以isEqualToArray 是行不通的。如果数组的对象是字符串,则此方法有效。
  • 试试这个。 for ( int i = 0; i
  • 因为我又得到了照片的PHAsset,所以previousAsset 不等于currentAsset,即使它们属于一张照片。如果数组的对象是NSString,这个方法就OK了。
猜你喜欢
  • 2010-10-03
  • 1970-01-01
  • 2012-10-28
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多