我正在为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]
我做错了什么?
答案 0 :(得分:1)
我能够通过修剪我正在渲染的NSString中的前导空格(包括换行符)来解决这个问题。这是我的分类方法:
- (NSString*)stringByTrimmingLeadingWhitespace
{
NSUInteger index = 0;
while((index < [self length]) && [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember: [self characterAtIndex: index]])
{
index++;
}
return [self substringFromIndex: index];
}
不幸的是,如果你必须保留领先的换行符,我没有其他答案。