NSAttributedString initWithData:选择:documentAttributes:错误:documentAttributes不会保留在ARC

Boz*_*ack 4 nsattributedstring ios

我正在尝试加载文档NSData(它来自Dropbox我的应用程序中的文件,但为了简单起见,下面的示例使用.txt文件,这导致我正在尝试解决的相同问题).

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

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

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

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

这是代码:

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;
    });
}
Run Code Online (Sandbox Code Playgroud)

任何线索都会很棒!

Rob*_*ier 11

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

NSDictionary* documentAttributes;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithData:data options:nil documentAttributes:&documentAttributes error:NULL];
Run Code Online (Sandbox Code Playgroud)

它正在传递documentAttributes.您没有将属性传递给它.