-1

我使用 Core Data 存储三个实体 User、LiveCard 和 LivePromos。当我将此数据读入内存并将其聚合为单个对象时,我的应用程序崩溃并给出如下所示的错误。

User *user = (User *)[self getEntityWithName:@"User" andPopulator:@selector(populateUser:)];
if(user != nil)
{
    NSMutableArray *liveCards = [self getEntityWithName:@"LiveCard" andPopulator:@selector(populateLiveCard:)];
    [user setCards:liveCards];

    NSArray *livePromos = [self getEntityWithName:@"LivePromo" andPopulator:@selector(populatePromos:)];

    for(LiveCard *card in user.cards) {
        NSMutableArray *cardsPromo = [NSMutableArray array];
        for(LivePromo *promo in livePromos) {
            if([card.cardId isEqualToString:promo.cardId]) {
                [cardsPromo addObject:promo];
            }
        }
        card.promos = cardsPromo;
    }
}
return user;

这是我得到的错误

MyApp(39516,0x3d38bb78) malloc: *** mmap(size=1935958016) 失败(错误代码=12)

*** 错误:无法分配区域

*** 在 malloc_error_break 中设置断点进行调试

注意:我在我的应用程序中使用 ARC

更新 我已经尝试设置malloc_error_break符号断点,这是我得到的 Tread Navigator 的屏幕截图

http://postimg.org/image/x48p0m6df/

我还在 iPhone 模拟器中的应用程序上运行 Instrument.Allocations 实用程序,这是一个屏幕截图,显示malloc. 我无法理解的是这个分配是在哪里进行的!

http://postimg.org/image/97v4zhszp/

抱歉,我无法直接在 SO 上上传图片

更新感谢大家的投入,问题是 UICollectionView 已损坏并且项目数以百万计。现在问题已解决

4

1 回答 1

2

不要“显而易见”,但您是否尝试过设置断点malloc_error_break?当它遇到那个函数时它会停止,查看其余的回溯会告诉你代码中的什么是造成这个巨大分配的原因。

于 2013-06-21T11:22:13.800 回答