iOS:快速滚动照片时出错?

标签 ios objective-c uiimageview didreceivememorywarning mwphotobrowser

我目前在我的应用程序中使用 MWPhotoBrowser,当我快速滚动浏览图像时出现以下错误:

Received memory warning.
2014-02-17 16:42:35.117 App[10803:60b] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x156f3160> was mutated while being enumerated.'
*** First throw call stack:
(0x2e71de83 0x38a7a6c7 0x2e71d971 0x151167 0x15139b 0x311643ff 0x3116446f 0x31164665 0x31164805 0x3111ea67 0x38f5f0af 0x38f6072f 0x38f61959 0x2e6e85b1 0x2e6e6e7d 0x2e651471 0x2e651253 0x3338b2eb 0x30f06845 0xff035 0x38f73ab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

我目前正在加载本地存储在应用程序中的图像。

这是抛出异常的方法:

- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent {
    for (id p in _photos) {
        if (p != [NSNull null]) {
            if (preserveCurrent && p == [self photoAtIndex:self.currentIndex]) {
                continue; // skip current
            }
            [p unloadUnderlyingImage];
        }
    } // Release photos
}

如有任何帮助,我们将不胜感激!

最佳答案

我不知道您使用的是哪个版本的 MWPhotoBrowser,但是最新的 herereleaseAllUnderlyingPhotos: 方法读取:

- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent {
    // Create a copy in case this array is modified while we are looping through
    // Release photos
    NSArray *copy = [_photos copy];
    for (id p in copy) {
        if (p != [NSNull null]) {
            if (preserveCurrent && p == [self photoAtIndex:self.currentIndex]) {
                continue; // skip current
            }
            [p unloadUnderlyingImage];
        }
    }
    // Release thumbs
    copy = [_thumbPhotos copy];
    for (id p in copy) {
        if (p != [NSNull null]) {
            [p unloadUnderlyingImage];
        }
    }
}

请注意这两行:

    NSArray *copy = [_photos copy];
    for (id p in copy) {

在迭代 _photos 之前,创建一个新数组 copy 以保护此迭代不被其他地方修改 _photos

在您的代码中,releaseAllUnderlyingPhotos: 直接从 _photos 数组中删除对象,但可以在代码的其他部分修改该数组,例如,didReceiveMemoryWarning,因为这是你的情况。

一旦您修改代码以迭代 releaseAllUnderlyingPhotos: 中的 _photos 副本,您的问题就会消失。

关于iOS:快速滚动照片时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21842242/

相关文章:

ios - 如何比较 if() 结构中的 UIImageView 名称

iphone - 如何隐藏/显示 UIimageview?

ios - 避免致命车祸

ios - 如何在 Swift 中从数组中的数组中获取字符串

ios - Places API 未为 iOS 启用,即使它已经启用

ios - 未知类型名称 'FIRDatabaseReference'

ios - 从两个单词的字符串中提取一个单词

ios - 在 Obj-c 中是否可以让一个动画 block 为另一个 block 设置动画?

objective-c - 使用 NSNumberFormatter 将 NSNumber 格式化为保留一位小数的百分比 (%)

ios - CATiledLayer 和 UIImageView 他们之间有什么大不了的?