NSAttributedString initWithData:options:documentAttributes:error:documentAttributes未保留在ARC中

时间:2014-02-08 04:06:45

标签: ios nsattributedstring

我正在尝试从NSData加载文档(它来自我的应用中的Dropbox文件,但为了简单起见,下面的示例使用.txt文件,导致同样的问题我我试图修复。

问题: 我实例化一个NSDictionary,并将其作为out参数传递给[NSAttributedString -initWithData:options:documentAttributes:error:]

但是,NSDictionary实例被取消分配,并导致-initWithData:options:documentAttributes:error:崩溃。

当我启用NSZombie时,我得到的错误是:[_ _ NSDictionaryI retain]:发送到解除分配的实例的消息

- 当我将NULL传递给documentAttributes时,initWithData:options:documentAttributes:error:运行正常。

以下是代码:

NSError* error;
NSString* path = [[NSBundle mainBundle] pathForResource:@"Forward Thinking"
                                                 ofType:@"txt"];
NSData* data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedAlways error:&error];
if (data) {
    dispatch_async(dispatch_get_main_queue(), ^{
        NSDictionary* documentAttributes = [[NSDictionary alloc] init];
        NSAttributedString* attrStr = [[NSAttributedString alloc] initWithData:data options:nil documentAttributes:&documentAttributes error:NULL];
        self.textView.attributedText = attrStr;
    });
}

任何线索都会很棒!

1 个答案:

答案 0 :(得分:11)

您不应该将传递给NSDictionary的方法分配给此方法。你想要的是:

NSDictionary* documentAttributes;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithData:data options:nil documentAttributes:&documentAttributes error:NULL];

它将documentAttributes传递给。您没有将属性传递给它。