drawInRect:withAttributes死亡,“消息发送到解除分配的实例”

时间:2013-09-21 23:26:36

标签: ios objective-c uikit

我正在为iOS 7更新应用程序。其中一个更改是切换到新的drawInRect:withAttributes函数而不是不推荐使用的drawInRect:withFont ... 这在iOS 7测试版上运行良好,但今天升级到最新的iOS 7版本后,该应用程序崩溃了:

[text drawInRect:theRect withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:fontSz], NSFontAttributeName, color, NSForegroundColorAttributeName, nil]];

显示消息:

*** -[NSStringDrawingTextStorage textContainerForAttributedString:containerSize:lineFragmentPadding:]: message sent to deallocated instance 0x187ed0f0

我尝试运行Zombie乐器,这根本没用,我的代码中的分配和对象的释放都没有。具体来说,我收到了消息:

An Objective-C message was sent to a deallocated 'NSStringDrawingTextStorage' object (zombie) at address: 0x169edc50.

对象的malloc / release在调用者下面:

[NSStringDrawingTextStorage stringDrawingTextStorage]

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我能够通过修剪我正在渲染的NSString中的前导空格(包括换行符)来解决这个问题。这是我的分类方法:

- (NSString*)stringByTrimmingLeadingWhitespace
{
    NSUInteger index = 0;

    while((index < [self length]) && [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember: [self characterAtIndex: index]])
    {
        index++;
    }

    return [self substringFromIndex: index];
}

不幸的是,如果你必须保留领先的换行符,我没有其他答案。